本书结合C# 3.0和Visual Studio 2008对LINQ进行了实操型讲解。本书介绍了LINQ编程的各个方面,展示了LINQ是如何帮你显著提高生产效率的,还告诉了你应当如何用LINQ创建具有更高可靠性和可维护性的应用程序。
本书首先介绍了LINQ所用到的最新的C#编程技术,比如匿名类型、分部方法以及Lambda表达式等。接着,通过具体的示例和易于改写的范例代码,分别针对对象、数据库和XML详细介绍了LINQ这个强大的新技术。你将会对LINQ的工作方式有一个深入而实用的理解,还会学到如何通过XML与其它数据模型的结合来实现各种各样的数据处理功能。
本书不仅适合LINQ的初学者,而且对.NET数据处理人员、ASP.NET开发人员和Windows Form开发人员都有非常大的帮助,同时也可以作为高等学校计算机或相关专业的教材使用。
封面图
目录
- 译者序
- 序
- 前言
- 致谢
- 第一部分为LINQ作准备
- 第1章使用匿名类型
- 11理解匿名类型
- 12使用匿名类型
- 121定义简单匿名类型
- 122使用数组初始化器语法
- 123创建复合匿名类型
- 124在for语句中使用匿名类型
- 索引
- 125匿名类型和using语句
- 126从函数返回匿名类型
- 13匿名类型的数据绑定
- 14测试匿名类型的相等性
- 15通过LINQ查询使用匿名类型
- 16泛型匿名方法简介
- 161使用匿名泛型方法
- 162实现内嵌的递归
- 17小结
- 第2章使用复合类型初始化
- 21通过命名类型初始化对象
- 211实现能够通过命名类型进行
- 复合类型初始化的类
- 212理解自动实现属性
- 22初始化匿名类型
- 23初始化集合
- 231完成Hypergraph
- 232使用观察者模式实现
- Hypergraph控制器
- 24使用转换运算符
- 241ToArray
- 242OfType
- 243Cast
- 244AsEnumerable
- 245ToList
- 246ToDictionary
- 247ToLookup
- 25小结
- 第3章定义扩展方法和分部方法
- 31扩展方法及其使用规则
- 32定义扩展方法
- 321实现扩展方法
- 322重载扩展方法
- 323定义泛型扩展方法
- 33扩展方法是如何支持LINQ的
- 34实现一个“会说话的”字符串扩展
- 方法
- 35定义分部方法
- 36小结
- 第4章yield return:使用NET的
- 状态机生成器
- 41理解yield return的工作方式
- 42使用yield return和yield break
- 421测试代码性能
- 422使用yield break
- 43小结
- 第5章理解Lambda表达式和闭包
- 51了解由函数指针到Lambda表达式
- 的演化过程
- 52编写基本的Lambda表达式
- 521自动属性
- 522阅读Lambda表达式
- 523Lambda表达式用作泛型活动
- 524搜索字符串
- 525Lambda表达式用作泛型谓词
- 526将Lambda表达式绑定到控件
- 事件
- 53利用Lambda表达式进行动态
- 编程
-
531使用Select
和Lambda -
表达式 -
532使用Where 和Lambda -
表达式 -
533使用OrderBy 和Lambda -
表达式 -
534将Lambda表达式编译为代码 -
或数据 -
54Lambda表达式和闭包 -
55柯里化 -
56小结 -
-
第6章使用标准查询运算符 -
61了解LINQ是如何实现的 -
62构造一个LINQ查询 -
63筛选信息 -
64使用限定符 -
65利用Skip和Take实现分区操作 -
66使用生成运算 -
661DefaultIfEmpty -
662Empty -
663Range -
664Repeat -
67相等性测试 -
68从序列中获取特定元素 -
69通过Concat串联序列 -
610小结 -
第二部分针对对象的LINQ -
第7章对查询进行排序和分组 -
71对信息进行排序 -
711按升序和降序排序 -
712直接使用扩展方法执行降序 -
排列 -
713执行次要排序 -
714翻转元素顺序 -
72对信息进行分组 -
73小结 -
-
第8章执行聚合运算 -
81聚合 -
82求集合平均值 -
83元素计数 -
84找出最小和最大的元素 -
85计算查询结果的总计 -
86中位数:实现一个自定义聚合 -
运算 -
87小结 -
-
第9章执行集合运算 -
91找出非重复元素 -
92通过Intersect和Except定义集合 -
93使用Union创建复合结果集 -
94小结 -
-
第10章掌握Select和SelectMany -
101探究Select -
1011带有函数调用功能的选择 -
1012使用Select谓词 -
1013从数据访问层返回自定义 -
业务对象 -
1014使用Select的索引打乱数组 -
1015构造21点扑克牌游戏的 -
基础功能 -
1016从计算所得的值上投影出 -
新类型 -
1017引入DLL -
1018同时使用GDI+和Windows API -
(或外部DLL)方法 -
1019使用Select将单词的首字母 -
改为大写 -
102从多个源中投影出新类型 -
103使用SelectMany从多个序列中 -
创建出一个新序列 -
104在SelectMany中使用索引 -
105小结 -
-
第11章联接查询结果 -
111使用多个from子句 -
112定义内联接 -
113使用自定义(或非等式)联接 -
1131实现非等式自定义联接 -
1132实现带有多个谓词的自定义 -
联接 -
1133实现带有临时范围变量的 -
自定义联接 -
114实现分组联接和左外联接 -
1141定义分组联接 -
1142实现左外联接 -
115实现交叉联接 -
116在组合键上定义联接 -
117小结 -
第12章查询Outlook和活动目录 -
121LINQ to Outlook -
122通过纯C#代码查询活动目录 -
123LINQ to Active Directory -
1231创建IQueryable LINQ -
Provider -
1232实现IQueryProvider -
1233将活动目录定义为数据源 -
1234将LINQ查询转换成活动 -
目录查询 -
1235实现辅助标签 -
1236定义活动目录架构实体 -
124通过LINQ查询活动目录 -
125小结 -
第三部分针对数据的LINQ -
第13章使用LINQ查询关系型 -
数据 -
131定义表对象 -
1311将类映射到表 -
1312查看由LINQ生成的查询 -
文本 -
132通过DataContext对象连接关系型 -
数据 -
133查询数据集 -
1331从DataTable中获取数据 -
1332查询DataTable时使用 -
Where子句 -
1333使用分区方法 -
1334在DataTable上进行排序 -
1335在DataSet上定义联接 -
134SqlMetal:使用实体类生成工具 -
135使用LINQ to SQL类设计器 -
136小结 -
第14章创建更好的实体以及映射 -
继承和聚合 -
141使用可空类型定义更好的实体 -
142为LINQ to SQL映射继承层次 -
结构 -
1421使用LINQ to SQL设计器创建 -
继承映射 -
1422使用LINQ to SQL设计器修改 -
现有类 -
143将EntitySet类添加为属性 -
144使用LINQ to SQL创建数据库 -
145小结 -
第15章通过LINQ查询关联 -
数据库表 -
151通过LINQ to DataSet定义联接 -
1511编写等式联接 -
1512编写不等式联接 -
1513定义左外联接以及右外 -
联接简介 -
1514思考右联接 -
152通过LINQ to SQL定义联接 -
1521编写等式联接 -
1522实现分组连接 -
1523实现左联接 -
153使用LINQ查询视图 -
1531构建SQL Server中的视图 -
1532使用LINQ to SQL查询视图 -
154使用LINQ to DataSet进行数据 -
绑定 -
155小结 -
第16章更新匿名关系型数据 -
161添加和移除数据 -
1611通过LINQ to SQL插入数据 -
1612通过LINQ to SQL删除数据 -
1613通过LINQ to SQL更新数据 -
1614使用存储过程 -
162调用用户自定义函数 -
163使用事务 -
164理解冲突解决 -
1641为SubmitChanges指明冲突 -
处理模式 -
1642捕获并解决并发冲突 -
165N层应用程序与LINQ to SQL -
166小结 -
第17章ADONET 30与Entity -
Framework简介 -
171理解问题和解决方案的一般性 -
本质 -
1711理解跟C#程序员有关的关系型 -
数据库模型的问题 -
1712理解Entity Framework是如何 -
解决这个问题的 -
1713理解解决方案的本质 -
172寻找附加资源 -
1721Wikipedia -
1722Entity SQL Blog -
1723下载并安装Entity Framework -
1724下载范例 -
1725关注时事新闻 -
173通过普通的ADONET编程构建 -
一个简单的应用程序 -
1731定义一个用以保存股票报价 -
的数据库 -
1732添加一个用于插入报价信息 -
的存储过程 -
1733添加一个外键 -
1734参考:完整的示例数据库 -
脚本 -
1735编写代码以获取股票报价并 -
更新数据库 -
174使用Entity Framework进行编程 -
1741创建实体数据模型 -
1742添加一个关联 -
1743使用Entity SQL查询实体 -
数据模型 -
1744使用LINQ to Entities查询 -
实体数据模型 -
175使用LINQ完成所有事情 -
176小结 -
第四部分针对XML的LINQ -
第18章从XML中提取数据 -
181加载XML文档 -
182查询XML文档 -
1821使用XDocument -
1822使用XElement -
1823管理属性 -
183从字符串中加载XML -
184处理缺失的数据 -
185使用查询表达式和XML数据 -
1851使用命名空间 -
1852嵌套查询 -
1853使用Where子句进行筛选 -
1854根据上下文查找元素 -
1855对XML查询进行排序 -
1856通过let计算中间值 -
186批注节点 -
187小结 -
第19章比较LINQ to XML与 -
其他XML技术 -
191比较LINQ to XML和XPath -
1911使用命名空间 -
1912查找子元素 -
1913查找兄弟元素 -
1914过滤元素 -
192比较LINQ to XML转换和XSLT -
193通过函数构造来转换XML数据 -
194小结 -
第20章从非XML数据构造XML -
201从CSV文件构造XML -
202从XML生成文本文件 -
203使用XML和嵌入式LINQ -
表达式(VB) -
204小结 -
第21章使用XmlWriter生成XML -
211快速浏览XmlWriter -
212使用XmlTextWriter编写XML -
文件 -
213小结 -
第22章将XML与其他数据模型 -
相结合 -
221从SQL数据创建XML -
2211定义对象关系映射 -
2212从SQL数据构造XML文档 -
2213使用XComment节点类型 -
2214在TreeView中显示XML -
文档 -
222从XML更新SQL数据 -
223小结 -
第23章LINQ to XSD支持类型化 -
XML编程 -
231理解LINQ to XSD的基本设计 -
目标 -
232使用LINQ to XSD进行编程 -
2321下载并安装LINQ to XSD -
Preview -
2322创建LINQ to XSD Preview -
Console Application -
2323定义XML内容 -
2324定义XML Schema文件 -
2325向架构文件添加正则表达式 -
2326使用LINQ to XML for Objects -
进行查询 -
233小结