首页>参考读物>计算机科学与技术>软件与程序设计

LINQ编程技术内幕
作者 : (美)Paul Kimmel 著
译者 : 唐学韬 等译
出版日期 : 2009-06-19
ISBN : 978-7-111-26759-1
定价 : 59.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 414
开本 : 16
原书名 : LINQ Unleashed: For C#
原出版社: Pearson Education USA(Shawn)
属性分类: 店面
包含CD :
绝版 : 未绝版
图书简介

本书结合C# 3.0和Visual Studio 2008对LINQ进行了实操型讲解。本书介绍了LINQ编程的各个方面,展示了LINQ是如何帮你显著提高生产效率的,还告诉了你应当如何用LINQ创建具有更高可靠性和可维护性的应用程序。
本书首先介绍了LINQ所用到的最新的C#编程技术,比如匿名类型、分部方法以及Lambda表达式等。接着,通过具体的示例和易于改写的范例代码,分别针对对象、数据库和XML详细介绍了LINQ这个强大的新技术。你将会对LINQ的工作方式有一个深入而实用的理解,还会学到如何通过XML与其它数据模型的结合来实现各种各样的数据处理功能。
本书不仅适合LINQ的初学者,而且对.NET数据处理人员、ASP.NET开发人员和Windows Form开发人员都有非常大的帮助,同时也可以作为高等学校计算机或相关专业的教材使用。

图书特色

Microsoft积极参与的LINQ查询技术使得程序员可以轻松地从任何数据源获取任何数据,而且不用关心这些数据是从哪来的,也不用关心这些数据是如何存储的。
本书是一本优秀的教学指南,它结合C# 3.0和Visual Studio 2008对LINQ进行了讲解。本书介绍了LINQ编程的各个方面,展示了LINQ是如何帮你显著提高生产效率的,还告诉了你应当如何用LINQ创建具有更高可靠性和可维护性的应用程序。
本书首先介绍了LINQ所用到的最新的C#编程技术,比如匿名类型、分部方法以及Lambda表达式等。接着,通过具体的示例和易于改写的范例代码,分别针对对象、数据库和XML详细介绍了LINQ这个强大的新技术。你将会对LINQ的工作方式有一个深入而实用的理解,还会学到如何通过XML与其他数据模型的结合来实现各种各样的数据处理功能。
作者简介
Paul Kimmel是一名有着20多年工作经验的软件架构师和.NET开发人员。他经常为企业和政府机构设计和实现大型应用程序。他编撰的技术书籍包括《Visual Basic .NET Power Coding》、《Advanced C# Programming》、《UML Demystified》以及《Visual Basic .NET Unleashed》。他连续四年当选为Microsoft MVP。
本书示例源代码请从www.hzbook.com下载
编写高效的LINQ查询以处理.NET对象、SQL数据库以及XML数据。
利用匿名类型以降低编程难度,减少设计时间和调试时间。
利用yield return这个新概念自动生成.NET状态机。
掌握LINQ查询语法、运算符、扩展方法、排序、分组、聚合和集合操作等。
充分利用select以及在N层应用程序的业务层中使用它。
查询存储在Microsoft SQL Server中的关系型数据。
利用可空类型消除不必要的数据库访问代码。
结合ADO.NET 3.0以及Microsoft新推出的功能强大的Entity Framework使用LINQ。
提取XML数据(无需麻烦而复杂的XPath)。
从CSV文件和其他非XML数据中自动构造出XML。
通过对LINQ进行扩展的方式来查询活动目录。

图书前言

从我第一次写代码算起,到你把这本书拿到手的那个时候,我就已经写了30年的代码了。最早的那段代码是用一台TRS-80上的ROM-BASIC编写的,那会儿我正在密歇根州奥沃索的华盛顿中学念五年级。让“坦克”倒着走并在屏幕上来回地放子弹,这的确是一件很爽的事情。还有更爽的,那就是,通过调整代码的方式来改变子弹的速度和目标的数量。年复一年,三十年过去了,我越来越为此而感到兴奋。有不少很棒的技术即将出现在我们面前,比如微软的Surface、Popfly以及LINQ等。本书就是关于LINQ(Language INtegrated Query,语言集成查询)的。
  LINQ是为C#开发的一种类似于SQL的语言。我第一次看到它时,我真的不喜欢它。我的第一印象是,有人把C#搞得更烂了,用这玩意儿写出来的东西跟SQL一样丑。我不喜欢它完全是因为我还不了解它。不过,我给了LINQ第二次机会(我希望你也能这样),然后我发现,LINQ是高度集成的而且非常强大,简直就像是一辆Tesla Roadster或是一架Extra 300L。
  LINQ的查询能力扩展到了对象、SQL、数据集、XML、XSD、实体上面,此外,还能扩展到其他提供者上面去,比如活动目录和SharePoint。也就是说,你可以针对对象、数据、XML、XSD、实体,或是活动目录而编写不同的查询语句(语法上都是相似的),就像是在数据库中编写SQL查询一样。另外,LINQ非常巧妙且出色的构建于泛型技术以及.NET 3.5中的一些新特性(比如扩展方法、匿名类型和Lambda表达式)之上。LINQ的另一个重要特点就是,它非常明显的表露出了微软的一种意愿,即既要革新又要利用那些最好的现有技术(如20世纪30年代出现的Lambda Calculus(λ演算));只要觉得某种技术还不错,那么就把这些元素吸收到我们所喜爱的工具或语言中去。
  LINQ及其构成基础都很强大,在本书中,你将会学到许多知识,这将有助于你全面掌握LINQ的使用方法并快速上手。你将学到有关匿名方法、扩展方法、Lambda表达式、状态机等知识,并学习如何编写LINQ查询,还会了解到泛型和CodeDOM在诸如LINQ这样的强大工具中所扮演的角色。你将弄清楚一个问题,即为什么要在更大更复杂的应用场景中使用LINQ。你将意识到,如果不用再编写那些你没有必要亲自动手的代码的话,究竟可以省下多少时间和精力。此外,你还将认识到,LINQ其实是很适合于n层架构的,它能使您在沿其总体方针的情况下,按时完成任务。
  本书是由一名获得了四次Microsoft MVP称号且做了十多年专栏作者的人编写的,本书将向你讲解有关LINQ以及NET 35新特性的一切知识,并告诉你如何变得比以前更有效率且获得更多的乐趣。
  本书使用约定
  本书所使用的排版约定如下:
  代码行、命令、语句、变量以及你将在屏幕上看到的文字将使用等宽字体。
  代码清单中偶尔出现的粗体字是用来提醒你当前所讨论的就是这段代码。
  语法描述中的占位符将使用斜体等宽字体。你需要将这些占位符替换为实际的文件名、参数,或是它所代表的其他任何元素。
  斜体字用于突出显示当前正在定义的技术术语。
  代码行前面的连接符图标说明该行是上一行的延续。有时,一行代码会很长,因此无法在页面的一个单行上显示出来。如果你在某个代码行的前面看到了,那么请记得该行是前一行的一部分。
  本书也含有注意、提示、警告等内容,它们将帮助你更快地找到重要或有用的信息。

封底文字

LINQ编程技术内幕
Microsoft的LINQ查询技术使得程序员可以轻松地从任何数据源中获取任何数据,而且不用关心这些数据是从哪来的,也不用关心这些数据是如何存储的。
本书是一本优秀的教学指南,它结合C# 3.0和Visual Studio 2008对LINQ进行了实操型讲解。本书介绍了LINQ编程的各个方面,展示了LINQ是如何帮你显著提高生产效率的,还告诉了你应当如何用LINQ创建具有更高可靠性和可维护性的应用程序。
本书首先介绍了LINQ所用到的那些最新的C#编程技术,比如匿名类型、分部方法以及Lambda表达式等。接着,通过具体的示例和易于改写的范例代码,分别针对对象、数据库和XML详细介绍了LINQ这个强大的新技术。你将会对LINQ的工作方式有一个深入而实用的理解,还会学到如何通过XML与其他数据模型的结合来实现各种各样的数据处理功能。
? 编写高效的LINQ查询以处理.NET对象、SQL数据库以及XML数据。
? 利用匿名类型以降低编程难度,减少设计时间和调试时间。
? 利用yield return这个新概念自动生成.NET状态机。
? 掌握LINQ查询语法、运算符、扩展方法、排序、分组、聚合、集合操作等。
? 充分利用select(以及如何在N层应用程序的业务层中使用它)。
? 查询存储在Microsoft SQL Server中的关系型数据。
? 利用可空类型消除不必要的数据库访问代码。
? 结合ADO.NET 3.0以及Microsoft新推出的功能强大的Entity Framework使用LINQ。
? 提取XML数据(无需麻烦而复杂的XPath)。
? 从CSV文件和其他非XML数据中自动构造出XML。
? 通过对LINQ进行扩展的方式来查询活动目录。
作者简介
Paul Kimmel是一名有着20多年工作经验的软件架构师和.NET开发人员。他经常为企业和政府机构设计和实现大型应用程序。他编撰的技术书籍包括《Visual Basic.NET Power Coding》、《Advanced C# Programming》、《UML Demystified》以及《Visual Basic .NET Unleashed》。他连续四年当选为Microsoft MVP。

图书序言

数据几乎影响着我们生活中的方方面面。我们所做的每件事情其实就是分析查阅数据,然后再以优惠券或其他市场营销手段对分析结果做出反应。在编写一个应用程序的时候,你可以清楚地知道这种或那种数据将会成为该解决方案的一部分。对于软件开发人员来说,在开发大型应用程序的时候,降低存取数据以及分析数据时的难度是很有必要的。事实上,数据会以各种各样的形式出现,人们很快便找到了一个具有很高价值的办法,即使用一个统一的框架来访问各种类型的数据。
  多年以来,可供Windows开发人员使用的各种数据访问方法层出不穷。ADO和OLEDB,以及再后来的ADO.NET都为我们提供了一种统一的关系型数据库访问方法。MSXML和ADO.NET使我们能够遍历和操作XML文档。虽然这些技术都有着不同的优点和缺点,但是它们都有着同一个问题:它们都无法让开发人员在编写数据访问操作代码的时候觉得舒服、自然。
  现在,LINQ使数据访问成为了NET中的一个高级编程概念,它使得开发人员能够用一种更有意义的方式来表述其所期望的查询。LINQ能够如此的强大,那是因为它让开发人员能够完全依靠智能感知技术来创建类型安全的数据访问代码和编译期的语法检查。
  Paul Kimmel做了一件非常漂亮的事情,因为他用一种简洁而又完整的方式介绍了LINQ。他不仅使你了解了LINQ,而且还非常专业地阐述了诸如匿名类型(Anonymous Type)以及Lambda表达式(Lambda Expression)等概念。本书中的示例代码给出了一些利用该技术的应用程序,它们都是以一种简明扼要的方式呈现出来的。这是一本非常不错的图书,可以在周六早晨沏一壶咖啡边喝边看。我希望你也能研读一下这本书,然后你会跟我一样从中学到很多知识的。
  
  Darryl Hogan
  Architect Evangelist, Microsoft

作者简介

(美)Paul Kimmel 著:暂无简介

译者简介

唐学韬 等译:暂无简介

译者序

非常荣幸我能够翻译这本书,不仅因为它是SAMS公司大名鼎鼎的Unleashed系列的一员,更因为我平时也经常关注Paul Kimmel的系列文章。对我而言,Paul Kimmel是一个爱好非常广泛的程序员前辈,这一点从他的书或文章中能够很明显地感觉到,而我也一直想成为他这样的程序员。因此,这次当机械工业出版社华章分社的陈冀康老师找我翻译这本书的时候,我着实兴奋了一把。
  本书的用辞很有意思,我在拿到原书之后,花了5天的时间一口气读完了,感觉就像是在看小说。Paul Kimmel不仅给我们带来了LINQ的完整学习方案,而且还在其中加入了不少的小故事,让读者能够更加愉快地学习LINQ这一门新技术,真正实现了“寓教于乐”的教学模式。
  本书分四部分,共23章,分别介绍了LINQ的各个方面。在正式开始介绍LINQ之前,Paul在第一部分向我们讲解了使用LINQ所必需的一些基础知识,如匿名类型(Anonymous Type)和Lambda表达式(Lambda Expression)等,这使得我们可以在后续的学习过程中不会感到一丁点儿的吃力。在第二部分中,Paul向我们介绍了针对对象的LINQ。在这部分中,他着重介绍了LINQ的一些基本概念,为了使我们能够更好地理解这些知识,他还安排了一个章节的内容来介绍如何用LINQ操作Outlook和AD中的数据。在第三部分中,Paul着重向我们介绍了针对数据的LINQ,还前瞻性地介绍了ADONET 30和Entity Framework(当然,这本书出版的时候,这些东西差不多都已经正式发布了)。在本书最后一部分中,Paul介绍了针对XML的LINQ,在最后一章中还介绍了我们在XML变成时期待已久的智能感知解决方案——LINQ to XSD。由此可见,本书所讲解的内容真真切切地覆盖了LINQ编程的方方面面。
  在我看来,Paul真的是做了一件很漂亮的工作,因为他不仅系统全面地介绍了LINQ这门新技术,而且还能让许多由于对LINQ一知半解而对其嗤之以鼻的人重新认识它。
  大家准备好了吗?那么,我们就跟着Paul踏上美妙的LINQ之旅吧!唐学韬
  2009年5月于广州

图书目录

译者序

前言
致谢


第一部分为LINQ作准备
第1章使用匿名类型
11理解匿名类型
12使用匿名类型
121定义简单匿名类型
122使用数组初始化器语法
123创建复合匿名类型
124在for语句中使用匿名类型
索引
125匿名类型和using语句
126从函数返回匿名类型
13匿名类型的数据绑定
14测试匿名类型的相等性
15通过LINQ查询使用匿名类型
16泛型匿名方法简介
161使用匿名泛型方法
162实现内嵌的递归
17小结

第2章使用复合类型初始化
21通过命名类型初始化对象
211实现能够通过命名类型进行
复合类型初始化的类
212理解自动实现属性
22初始化匿名类型
23初始化集合
231完成Hypergraph
232使用观察者模式实现
Hypergraph控制器
24使用转换运算符
241ToArray
242OfType
243Cast
244AsEnumerable
245ToList
246ToDictionary
247ToLookup
25小结

第3章定义扩展方法和分部方法
31扩展方法及其使用规则
32定义扩展方法
321实现扩展方法
322重载扩展方法
323定义泛型扩展方法
33扩展方法是如何支持LINQ的
34实现一个“会说话的”字符串扩展
方法
35定义分部方法
36小结

第4章yield return:使用NET的
状态机生成器
41理解yield return的工作方式
42使用yield return和yield break
421测试代码性能
422使用yield break
43小结

第5章理解Lambda表达式和闭包
51了解由函数指针到Lambda表达式
的演化过程
52编写基本的Lambda表达式
521自动属性
522阅读Lambda表达式
523Lambda表达式用作泛型活动
524搜索字符串
525Lambda表达式用作泛型谓词
526将Lambda表达式绑定到控件
事件
53利用Lambda表达式进行动态
编程
531使用Select和Lambda
表达式
532使用Where和Lambda
表达式
533使用OrderBy和Lambda
表达式
534将Lambda表达式编译为代码
或数据
54Lambda表达式和闭包
55柯里化
56小结

第6章使用标准查询运算符
61了解LINQ是如何实现的
62构造一个LINQ查询
63筛选信息
64使用限定符
65利用Skip和Take实现分区操作
66使用生成运算
661DefaultIfEmpty
662Empty
663Range
664Repeat
67相等性测试
68从序列中获取特定元素
69通过Concat串联序列
610小结
第二部分针对对象的LINQ
第7章对查询进行排序和分组
71对信息进行排序
711按升序和降序排序
712直接使用扩展方法执行降序
排列
713执行次要排序
714翻转元素顺序
72对信息进行分组
73小结

第8章执行聚合运算
81聚合
82求集合平均值
83元素计数
84找出最小和最大的元素
85计算查询结果的总计
86中位数:实现一个自定义聚合
运算
87小结

第9章执行集合运算
91找出非重复元素
92通过Intersect和Except定义集合
93使用Union创建复合结果集
94小结

第10章掌握Select和SelectMany
101探究Select
1011带有函数调用功能的选择
1012使用Select谓词
1013从数据访问层返回自定义
业务对象
1014使用Select的索引打乱数组
1015构造21点扑克牌游戏的
基础功能
1016从计算所得的值上投影出
新类型
1017引入DLL
1018同时使用GDI+和Windows API
(或外部DLL)方法
1019使用Select将单词的首字母
改为大写
102从多个源中投影出新类型
103使用SelectMany从多个序列中
创建出一个新序列
104在SelectMany中使用索引
105小结

第11章联接查询结果
111使用多个from子句
112定义内联接
113使用自定义(或非等式)联接
1131实现非等式自定义联接
1132实现带有多个谓词的自定义
联接
1133实现带有临时范围变量的
自定义联接
114实现分组联接和左外联接
1141定义分组联接
1142实现左外联接
115实现交叉联接
116在组合键上定义联接
117小结

第12章查询Outlook和活动目录
121LINQ to Outlook
122通过纯C#代码查询活动目录
123LINQ to Active Directory
1231创建IQueryable LINQ
Provider
1232实现IQueryProvider
1233将活动目录定义为数据源
1234将LINQ查询转换成活动
目录查询
1235实现辅助标签
1236定义活动目录架构实体
124通过LINQ查询活动目录
125小结
第三部分针对数据的LINQ

第13章使用LINQ查询关系型
数据
131定义表对象
1311将类映射到表
1312查看由LINQ生成的查询
文本
132通过DataContext对象连接关系型
数据
133查询数据集
1331从DataTable中获取数据
1332查询DataTable时使用
Where子句
1333使用分区方法
1334在DataTable上进行排序
1335在DataSet上定义联接
134SqlMetal:使用实体类生成工具
135使用LINQ to SQL类设计器
136小结

第14章创建更好的实体以及映射
继承和聚合
141使用可空类型定义更好的实体
142为LINQ to SQL映射继承层次
结构
1421使用LINQ to SQL设计器创建
继承映射
1422使用LINQ to SQL设计器修改
现有类
143将EntitySet类添加为属性
144使用LINQ to SQL创建数据库
145小结

第15章通过LINQ查询关联
数据库表
151通过LINQ to DataSet定义联接
1511编写等式联接
1512编写不等式联接
1513定义左外联接以及右外
联接简介
1514思考右联接
152通过LINQ to SQL定义联接
1521编写等式联接
1522实现分组连接
1523实现左联接
153使用LINQ查询视图
1531构建SQL Server中的视图
1532使用LINQ to SQL查询视图
154使用LINQ to DataSet进行数据
绑定
155小结

第16章更新匿名关系型数据
161添加和移除数据
1611通过LINQ to SQL插入数据
1612通过LINQ to SQL删除数据
1613通过LINQ to SQL更新数据
1614使用存储过程
162调用用户自定义函数
163使用事务
164理解冲突解决
1641为SubmitChanges指明冲突
处理模式
1642捕获并解决并发冲突
165N层应用程序与LINQ to SQL
166小结

第17章ADONET 30与Entity
Framework简介
171理解问题和解决方案的一般性
本质
1711理解跟C#程序员有关的关系型
数据库模型的问题
1712理解Entity Framework是如何
解决这个问题的
1713理解解决方案的本质
172寻找附加资源
1721Wikipedia
1722Entity SQL Blog
1723下载并安装Entity Framework
1724下载范例
1725关注时事新闻
173通过普通的ADONET编程构建
一个简单的应用程序
1731定义一个用以保存股票报价
的数据库
1732添加一个用于插入报价信息
的存储过程
1733添加一个外键
1734参考:完整的示例数据库
脚本
1735编写代码以获取股票报价并
更新数据库
174使用Entity Framework进行编程
1741创建实体数据模型
1742添加一个关联
1743使用Entity SQL查询实体
数据模型
1744使用LINQ to Entities查询
实体数据模型
175使用LINQ完成所有事情
176小结
第四部分针对XML的LINQ

第18章从XML中提取数据
181加载XML文档
182查询XML文档
1821使用XDocument
1822使用XElement
1823管理属性
183从字符串中加载XML
184处理缺失的数据
185使用查询表达式和XML数据
1851使用命名空间
1852嵌套查询
1853使用Where子句进行筛选
1854根据上下文查找元素
1855对XML查询进行排序
1856通过let计算中间值
186批注节点
187小结

第19章比较LINQ to XML与
其他XML技术
191比较LINQ to XML和XPath
1911使用命名空间
1912查找子元素
1913查找兄弟元素
1914过滤元素
192比较LINQ to XML转换和XSLT
193通过函数构造来转换XML数据
194小结

第20章从非XML数据构造XML
201从CSV文件构造XML
202从XML生成文本文件
203使用XML和嵌入式LINQ
表达式(VB)
204小结

第21章使用XmlWriter生成XML
211快速浏览XmlWriter
212使用XmlTextWriter编写XML
文件
213小结

第22章将XML与其他数据模型
相结合
221从SQL数据创建XML
2211定义对象关系映射
2212从SQL数据构造XML文档
2213使用XComment节点类型
2214在TreeView中显示XML
文档
222从XML更新SQL数据
223小结

第23章LINQ to XSD支持类型化
XML编程
231理解LINQ to XSD的基本设计
目标
232使用LINQ to XSD进行编程
2321下载并安装LINQ to XSD
Preview
2322创建LINQ to XSD Preview
Console Application
2323定义XML内容
2324定义XML Schema文件
2325向架构文件添加正则表达式
2326使用LINQ to XML for Objects
进行查询
233小结

教学资源推荐
作者: (美)Al Kelley Ira Pohl
作者: [美]克洛维斯· L.汤多(Clovis L. Tondo) 斯科特· E.吉姆佩尔(Scott E. Gimpel)著
作者: [美] 丹尼尔·卡斯沃姆(Daniel Kusswurm) 著
作者: 刘振安
参考读物推荐
作者: 陶国荣 著
作者: 陆嘉恒 著
作者: [美]布兰登·伯恩斯(Brendan Burns),埃迪·维拉尔巴(Eddie Villalba),戴夫·斯特雷贝尔(Dave Strebel),拉克兰·埃文森(Lachlan Evenson) 著
作者: 张文亮 编著