`
izuoyan
  • 浏览: 9222419 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

书讯 -- 一致化对象与数据的存取 LINQ

阅读更多

何谓 LINQ

程序语言随着时间演进,一再沉淀经验与抽象后,以简练直观的语法解决具有共通特征的各式问题。Visual Studio 2008(程序代码名称为 Orcas)C# 3.0 VB.NET 9.0 后将支持新的语法 Language Integrated Query(LINQ),想一体解决多样的资料存取。它是由 Anders Hejlsberg 所主导。Anders 曾打造了 Turbo PascalDelphiVisual J++C# 等叫好叫座的产品,单凭这位杀手应用创造者的眼光,LINQ 就不可小觑。

LINQ 是一系列语言延伸模块,以型别安全的方式支持数据查询。期待隔绝各种数据的特性,不管是各厂家数据库的 SQL 方言,或是 XML DOMXQuery XPath,抑或是对象集合的属性存取。以共通的方式完成数据操作,如:挑选、比对、排序、汇总等等。期待减轻程序开发人员学习操作各种数据的负荷。

LINQ 藉由各语言编译程序将内嵌的 LINQ 语法转译成原本的 C# VB.NET 程序代码,并呼叫相关的底层模块以实体维护数据。最后编译成与 .NET Framework 2.0 CLR 兼容的 IL,所以 CLR 本身并未增加与 LINQ 相关的模块,但 .NET FrameworkVisual Studio 整合开发环境和程序语言需要增加相关功能和语法。

就笔者自己的感觉,LINQ 有以下的好处:

l 简化大量的细节运作,将如何(how)取得数据换成要操作什么(what)数据:这隐含存取优化交由专家来做,如 DB 引擎优化存取数据。

l 透过IEnumerable<T> 一致性地存取各种数据,并在查询语法中互相整合:如 File System、操作系统的 processRegistry、对象集合、XMLDB...,所用的皆是对象,大家的属性都是数据。换句话说,数据对象化,对象数据化,存取二者的语法与语意相同。

l 平行运算:若要处理大量数据,程序设计师不容易撰写 for 循环还包含平行运算。但 LINQ 转译成 C# VB.NET 的程序代码时,可以平行运算的方式处理大量数据。

l 撰写数据对象存取的过程中,可以 IntelliSense 和强型别检查:相较于以往 ADO.NET 加上 SQL 语法,LINQ typed dataset 直观易懂,且应用更为广泛。

就笔者与许多朋友聊到 LINQ 时,最多的询问便是「未来是否不需要学 SQL 了?」个人认为,短时间不可能,LINQ 或许会减轻程序设计师对 SQL 的倚赖,但 LINQ 不会取代 SQL。它们各有一片天,LINQ 是程序设计师讲的数据对象语言,SQL 是数据库管理师对数据库引擎讲的语言,LINQ 是从应用程序处理数据的角度出发,但 SQL 关乎着整体数据库服务器有效且安全地活着的每一个细节。

而紧接的问题通常是:「将数据以对象来包装,透过 entity 类别间接存取数据,那是否会有效率问题?」这笔者无法回答,尚待真实世界来证明。

LINQ 范例

你可以在 C# 中直接内嵌如下的语法:取得在 Customer 对象集合中,每个 Customer 的属性 Country 值为 USA,按照 City 属性由大到小排序,传回以 CompanyName City 两个属性的字符串值所建立的新对象之集合:

var matchCustomers = from c in db.Customers

where c.Country == "USA"

orderby c.City descending

select new { c.CompanyName, c.City };

这句 LINQ 语法经由 C# 编译程序解析,传回实做 IEnumerable<Anonymous Type> 接口的对象给 matchCustomers 变量。而在查询语法中,呼叫了 whereorderbyselect 延伸方法(Extension Methods)。并定义匿名方法(Anonymous Methods)委派(delegate);要求 where 方法比较 Customers 集合中 Customer 对象的 Country 属性值为 USA。换句话说,自动将 c.Country == "USA" 转成 bool Pred<T>(T item) 形式的委派。最后透过 select 延伸方法搭配对象初始化表达式,回传匿名型别(Anonymous Type)对象的集合。

若不采用 LINQ 写法,上述语法也可以写成如下的方式:

var matchCustomers = db.Customers.Where(c => c.Country == "USA").OrderByDescending(c => c.City).Select(c => new { c.CompanyName, c.City });

哇,想我修习 .NET 数年,竟不知所云!?在此介绍一本入门书:「Introducing Microsoft LINQ」,Microsoft Press 出版。它让你了解以往的 C# VB.NET 各版本如何渐进地增加功能,最后演变出 LINQ 语法。

书籍内容

本书结构短小,仅六章加上一个附录

第一章针对 LINQ 做总体概观介绍,初读此章时,觉得过于唐突,比照下载的完整范例程序代码还是不知所云,满头问号。待看完本书其他章节后,再回过头看第一章,这回看懂了J

没有任何进步是独立完成的,因此本书第二、三章介绍为了支持 LINQ,或应该说若你要了解 LINQ 的运作原理,必须先熟悉 C# VB.NET 的相关功能,约略表列如下:

l C# 2.0 提供的泛型(Generic)、匿名方法,与改良的委派 Enumerators Yield

l C# 3.0 提供的 Local Type InferenceLambda 表达式(Lambda Expressions)、延伸方法、隐含型别化局部变量(var)、匿名型别,和改良的对象初始化表达式(Object Initialization Expressions)

VB.NET 9.0 LINQ 语法相关的项目和前述 C# 相似,但少了 yield 关键词和匿名方法[1],多了对 XML 语法的支持和 Relaxed Keyword

本书第四章介绍 LINQ 的语法结构,以及各种数据集合的运算,如连结、排序、过滤、群组、汇总.. .NET Framework 预设为 LINQ 所提供的多种延伸方法。

第五章介绍 LINQ to ADO.NET 的特征,这又分为 LINQ to SQLLINQ to DataSetLINQ to Entities ,本章简述这三部分的建置与对应的 LINQ 语法:

l LINQ to SQL 透过 Orcas 的「LINQ to SQL File」模板产生出类别实体,以对应 SQL Server 数据库内的某些数据表及其关联,或是呼叫预存程序、函数等数据库对象的方法后,撰写数据处理的语法变得直观易懂。搭配交易,以属性和方法来新增、修改、删除、查询数据对象。

l LINQ to DataSet:由于 DataSet 可以视作内存中的小型数据库,而赋予 DataSet 数据的方式也很多样化,因此当 DataSet 有数据后,仍透过 LINQ 如同对一般数据库的存取。

l Orcas 内建了产生 Entity Data Model(EDM) 的精灵,将数据存取对象的操作与数据实体储存机制隔绝开来。LINQ 仍以相似的方式存取对象化的数据实体。此部分的相关信息可参考本书的附录。

第六章解释何谓 LINQ to XML。由于 LINQ to XML API 尝试简化 XML 的相关技术,所以建置了一整组 X 开头的类别,让你以直观的对象架构存取 XML 的各种节点,而不需要透过 W3C XML DOM 的繁复方式。本章除了说明这些 X 开头的类别与以往 DOM 各对象方法之对应外,也阐述了如何透过 LINQ 维护 XML 数据。

在附录中解释了 ADO.NET Entity Framework 的架构,以及 Orcas 如何产生该架构下的三种档案:

l Conceptual Schema Definition Language(CSDL):用来描述程序代码所依据的数据定义。

l Storage Schema Definition Language(SSDL):用来描述实体数据储存区,如 SQL Server 对数据库内各对象的定义。

l Mapping Schema Language(MSL):用来联系对应 CSDL SSDL,因此 CSDL SSDL 可以多对多对应,也就是数据操作与数据储存能够分开。

Orcas 参照 CSDL 会产生出代表数据的实体(entity)对象之 C# 程序代码,再经由 SSDL MSL 结合到数据储存的实体,如 SQL Server。当透过 LINQ 操作 ADO.NET Entity 时,可轻易完成数据维护与交易管理。

阅读建议

本书是为熟悉 C# 的程序设计师介绍 LINQ 语法,因此全书的文字内容并没有完整的可执行范例[2],且未与 ASP.NET Windows Form 等用户接口技术整合。但对于 LINQ 的基本技术介绍得还算完整。由于只有 217 页,逐页读完,也就对 LINQ 了然于胸J。若仅想熟悉 C# VB.NET 二者之一,还可以在第二、三两章中择一,需要阅读的分量就更少了。

但若不熟悉 C#,则你需要很大的耐心,先了解本文上述所表列 C# 的各项功能,并反复阅读本书,才能渐渐融会贯通。

最后,若你要购买本书,先有两点考虑:

l LINQ 还处于 Beta,明年推出的正式版可能仍有变化。

l 相对于内容分量,本书的价格偏于昂贵。

也因如此,它在 Amazon 的评价只有两颗星。或许,它仅适合买书不考虑成本,以及对于新知充满好奇的人。

本书仅是 LINQ 的入门介绍,对于实际使用 LINQ 到日用习惯的数据操作,如与控件做双向数据系结(DataBinding)以维护数据库内数据、弹性地动态组 SQL 语法等,并未明确地交代。期待这一部分随着 Orcas 步入正式版会有简单且完整的解法。

相关阅读

最后,笔者列出些相关的资源以延伸阅读:

Anders Hejlsberg (C# 首席设计师) LINQ 定位的说明与实际亲手示范其用法:

l http://blogs.msdn.com/charlie/archive/2007/01/26/anders-hejlsberg-on-linq-and-functional-programming.aspx

l http://channel9.msdn.com/showpost.aspx?postid=114680

MSDN 上介绍 LINQ 的文件:该篇专栏可几近取代本书的第二章。

l http://msdn.microsoft.com/msdnmag/issues/07/06/csharp30/default.aspx?loc=zx

作者为本书所建置的网站,上有当作试阅的第一章,以及可下载的范例程序代码:

l http://introducinglinq.com/



[1] VB.NET 9.0 虽未个别支持 Anonymous Method 的宣告与使用,但 lambda expression LINQ 实则需要 Anonymous Method 的运行架构。因此 VB.NET 9.0 编译程序在底层解释与编译前述二者的语法时,已经采用了 Anonymous Method

[2] 本书没有随附范例程序代码光盘,仅可从网站下载。但若你想要执行那些范例,最好先从 MSDN 下载并安装 Orcas Beta 版。才能顺利执行范例程序代码。

分享到:
评论

相关推荐

    《指向深度学习的生物学教学研究》书讯.pdf

    这种方式不仅提高了学生自我反思的元认知水平,还促进了学生对知识的整体化建构,避免了知识碎片化的问题。 此外,书中还强调了核心素养的培育。核心素养不是通过直接教学传授的,而是需要在实践中,尤其是在解决高...

    《指向深度学习的生物学教学研究》书讯 (2).pdf

    此外,数学分析方法,比如数据分析,也能够在生物学研究中发挥作用,帮助学生更准确地理解和解释实验数据。 在生物学课程教学过程中,作者建议教师应该避免给出扩展性的结论,因为生命现象极为复杂,而科学理论本身...

    “教师专业学习共同体(PLC)研究丛书”书讯.pdf

    它强调教师间的合作与共享,通过共同学习和交流经验来促进专业成长和学生学习。随着教育专业化的推进,PLC逐渐成为国内外教育研究的焦点,对于探索教师专业发展的新途径具有重要意义。 PLC的核心理念是基于共同的...

    手机阅读材料介绍.pptx

    综上,手机阅读服务为用户提供便捷的阅读体验,通过多样化的订购方式和丰富的服务内容,满足不同用户的阅读需求。无论是在线阅读还是离线下载,用户都能在移动设备上享受到丰富的图书资源。同时,合理的资费策略鼓励...

    北大青鸟项目 在线书店

    JavaScript是实现动态交互的关键,可以处理用户的输入,更新页面内容,以及与服务器进行数据交换。 后端开发通常采用如PHP、Java或.NET等服务器端编程语言,这些语言能够处理用户的请求,与数据库交互,执行业务...

    基于WEB的网上书店毕业论文.doc

    Hibernate是一个对象关系映射(ORM)框架,简化了数据库操作,将Java对象与SQL数据库表进行映射;Spring则提供了依赖注入(DI)和面向切面编程(AOP),用于管理和协调整个系统的组件。 3. **MySQL数据库**:MySQL...

    当当读书 v4.6.0

    【个人中心】全面掌握个人读书脚印,轻松管理账号信息,还可及时获取最新书讯、优惠活动、礼券到期提醒。 【阅读体验全面升级】 1、UI、UE全面优化,读书秒开、翻页顺滑、护眼模式、轻松阅读……堪称业界良心的升级...

    初中语文文摘社会出名

    9. 信息的真实与虚假:夏雨的书讯广告存在误导性,这引发了关于诚实宣传和道德责任的讨论。在信息传播中,真实性和透明度对于建立信任至关重要。 10. 文学创作的价值:故事中的事件反映了现代文学创作中商业与艺术...

    JS向上滚动代码。。。

    JS向上滚动,JS向上滚动,JS向上滚动,JS向上滚动

    蔚蓝网上书店首页代码

    &lt;!...&lt;... &lt;head&gt; &lt;meta charset="UTF-8"&gt;...link href="css/global.css" rel="stylesheet"/&gt;... &lt;div class="book_sort_bg"&gt;&lt;img src=... ・袁伟民与体坛风云:实话实... ・我们台湾这些年:轰动两岸... ...

    信息时代导读工作的价值和措施.pdf

    《信息时代导读工作的价值和措施》探讨了在信息化背景下,图书馆如何通过有效的导读工作提升服务质量。随着互联网技术的发展,信息时代的到来,图书馆的功能不再仅限于传统的文献存储和借阅,而是在信息导航方面承担...

    js当当网上书店-首页

    首页的主要内容是查看最新上架的各类图书、重点关注的图书、近7日网上畅销的图书、书讯快递,以及根据图书分类的方式查看各类图书,首页应实现如下功能。 1、 网站导航部分的树形菜单。当鼠标指针停在“我的当当”...

    文化公司图书推介 PPT模板.pptx

    - **平面媒体**:合作全国数百家媒体,发布书讯、书评,提升图书的知名度。 - **电台电视台**:通过广播和电视节目推荐,扩大影响力。 - **渠道推广**:与当当、卓越等在线零售商合作,进行专题制作和打榜;与...

    应用Ghostscript和GSview实现方正书版PS文件向PDF文件的转换

    此外,由于电子化的趋势,专业期刊与出版社的合作关系也日益紧密。出版社通常拥有较为完善的发行渠道,例如新华书店系统和二级渠道。而期刊的发行则多通过邮局,也有部分自主发行。如果期刊与出版社能够联手,互相...

    图书营销策划.pdf

    总的来看,《乖,摸摸头》的营销策划充分利用了内容的真实性和作者的个人魅力,结合多元化的推广手段,旨在触动读者的情感,引发共鸣,从而在竞争激烈的图书市场中脱颖而出。通过精准的读者定位和有效的营销策略,这...

    图书的创意与策划方案.pptx

    图书宣传的创意与策划分为三个境界,首先是发布书讯、书评和书摘,然后是打造品牌图书,提升出版社形象,最后是以出版社的品牌带动图书的宣传。这一过程的核心目标是提高图书的社会影响力和发行量。实现这一目标的...

    网页设计实习报告及网页设计实训报告pdf

    回顾这次书讯经历,至今我仍感慨颇多,的确,从选题到开始制作,从理论到实践,5天实训的日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上...

    图书营销策划PPT教案.pptx

    图书宣传策划通常按照四个层次进行:通过连载预热,专访深入介绍,发布书讯广泛传播,以及举办签售等活动增强互动。为了有效执行宣传策略,出版社需要随时关注图书选题动态,制定针对重点图书的宣传方案,并建立与...

Global site tag (gtag.js) - Google Analytics