标题：LINQ入门与应用
出版信息
作　　者： 王的强 
出 版 社： 清华大学出版社
出版时间： 2009-5-1 
页　　数： 427 （配光盘）
开　　本： 16开 
I S B N ： 9787302200253
前言
2008年是不平凡的一年，对中国人来说这一年发生了很多事情，从年初的冰冻雨雪灾害，到随后的汶川特大地震，再到北京奥运会的荣耀辉煌，及至岁末年尾的世界金融危机冲击，中国度过了波澜壮阔的一年。
IT业界在2008年，也有很多让人激动的事情发生，例如微软公司在2008年早些时候，正式发布了Visual Studio 2008 和 .NET Framework 3.5 版，对 .NET 做了很多重大的改进，其中 LINQ 技术尤为耀眼。
LINQ多项革命性特征必将引领信息处理技术走向新的高度，所以众多读者期望能更加深入、透彻地了解LINQ所带来的各种编程优势对其自身开发工作的促进作用。该书的立意是从理论联系实际出发，通过讲解使用LINQ技术在解决开发过程中经常遇到的常见问题入手，从而更好的理解LINQ技术，为读者在将来的生产环境中使用LINQ技术打下基础。 
本书共7章，具体内容如下：
第1章 LINQ介绍
叙述了LINQ的一些概念和使用LINQ编程的优势，还简单介绍了开发LINQ的编程环境Visual Studio 2008的安装和配置。在叙述中，用三个实例引领读者了解LINQ to Objects、LINQ to ADO.NET、LINQ to XML，同时对实例的开发步骤，都进行了非常仔细地讲解，目的就是让读者尽快熟悉Visual Studio 2008开发环境，为后面的学习打下基础。 
第2章 C#语言新特性及相关知识
首先叙述了.NET各个版本之间的关系，然后分别讲解了C# 语言的一些新特性。在讲解中，尽力避免晦涩难懂的理论叙述，通过大量有趣、实用的例子，演示了C# 语言的自动属性、可空类型、泛型、委托、迭代器、隐式类型局部变量、对象集合初始化器、匿名类型、扩展方法、匿名方法、Lambda表达式等特性。最后的综合实例，更是充分利用这些特性，带给读者关于C# 语言的锐利体验。
第3章 LINQ 基本子句介绍
这一章讲述了LINQ表达式的from子句、where子句、select子句、group子句、into子句、排序子句、let子句、join子句等基本子句，这些子句都是LINQ标准查询运算符的一部分。
第4章 用于集合、文件、字符串对象的LINQ（LINQ to Objects）
通过大量实例讲解了，LINQ to Objects的查询运算符，LINQ to Objects是LINQ技术的基础，掌握这些查询运算符也就掌握了LINQ技术的核心操作。本章最后的综合实例，演示LINQ在ASP.NET和WINFORM下的运用，并且顺便让读者感受了一下ASP.NET中新增的Ajax技术。
第5章 用于数据库访问的LINQ（LINQ to SQL）
通过一些实例讲解并演示了如何使用Microsoft Visual Studio 2008设计器、手动方式、XML文件建立LINQ to SQL的实体对象；介绍了用于映射数据库及进行相关操作的DataContext对象、操作数据库单一表格的Table<TEntity>类、操作数据库一对多关系表格的EntitySet<TEntity>类。掌握这些知识后，便可以熟练使用LINQ to SQL进行数据库开发。本章最后的综合实例，使用LINQ to SQL操作一对多关系的表格，演示了实体对象的序列化与反序列化，讲解了如何正确绑定DataGridView的数据源等，相信通过这个实例，读者对LINQ to SQL的认识会更加深入。
第6章 用于XML访问的LINQ（LINQ to XML）
通过一些实例讲解并演示了LINQ to XML的一些概念及基本操作，使用XML轴方法处理XML元素，使用LINQ表达式处理XML元素，如何修改、变造、输出XML树，其中通过6.4.5小节变造XML树的实例，读者可以体验到LINQ的强大功能。本章最后的综合实例，使用LINQ to SQL操作一对多关系的表格，统计订单数据，之后使用LINQ to XML将实体对象转换为XML节点，实现了一个较为完整的RSS生成类。
第7章 综合应用实例：商品管理解决方案
在企业开发中，大多都遵从多层结构开发方式。例如：一个解决方案，需要有构建持久保存数据的数据层、实现商业逻辑的逻辑层、和用户沟通、交换数据的表示层，这就是一个典型的3层结构系统。那种生成界面之后，双击控件直接进行编码的方式，是无法适应企业开发中，复杂、繁琐、不断重构的环境。本章的解决方案实例，分为3个项目来实现一个数据层、一个商店模型、一个在线商品浏览页面、一个收银台桌面程序等。在DLL类库项目中，演示了LINQ to SQL技术；在WINDOWS窗体项目中，演示了LINQ to Objects技术；在ASP.NET项目中，演示了LINQ to XML技术。
本书采用实践为主、理论为辅的方法，首先对C# 新改进的一些语法做了详细地剖析，让读者领会C# 语法的新特点为后面的学习打下基础，然后对 LINQ 各个子句和组件进行了实例讲解，通过一个个生动的示例带领读者由浅入深系统得学习和掌握LINQ技术。
本书对开发步骤的详细介绍，有助于读者更好地掌握Microsoft Visual Studio 2008开发环境，用好工具，往往会有事半功倍的效果。
本书各个章节中的综合实例，除了充分演示了LINQ技术外，还放弃了界面与逻辑混合的初级方式，极力引导读者适应面向对象的开发方式。
作者简介
王的强，高级软件工程师，曾先后参与主导过青岛广播电视学会期刊编辑管理系统、中国平安保险公司青岛营业区保单统计系统、韩国KCC公司定制组件开发以及青岛纵横纺织品集团公司等多家企业的ERP系统、大型商业网站的开发及管理工作，对新技术的实际应用经验丰富，目前作为一家网络公司的执行董事，负责开发指导及管理工作，有自己的工作室，主要从事新技术实验、应用研究、企业定制开发等工作。 
序言
IT业界在2008年有很多让人激动的事情发生，例如微软公司在2008年早些时候，正式发布了VisualStudio2008和．NETFramewor．k3．5版，对．NET做了很多重大的改进，其中UNQ技术尤为耀眼。
LINO的多项革命性特征必将引领信息处理技术走向新的高度。所以众多读者期望能更加深入、透彻地了解LINO所带来的各种编程优势及其对开发工作的促进作用，本书以理论联系实际的讲解风格，通过介绍如何使用LINO技术解决开发过程中经常遇到的问题，来帮助读者更好地理解LINQ技术，为在生产环境中使用LINQ技术打下基础。
本书共分7章，主要内容说明如下。
第1章：LINQ介绍。
叙述LINO的一些概念和使用LINQ编程的优势，还简单介绍开发LINQ的编程环境VisualStudio2008的安装和配置。在叙述中，用三个实例引领读者了解LINQtoObjects、LINQtoADO．NET、LINQtoXML，同时对实例的开发步骤都进行非常细致的讲解，目的是让读者尽快熟悉VisualStudio2008开发环境，为后面的学习打下基础。 
目录
第1章     LINQ介绍
1.1 什么是LINQ
1.2 为什么要用LINQ
1.3 搭建LINQ开发环境
1.3.1 安装 Visual Studio 2008
1.3.2 配置 Visual Studio 2008
1.4 初识LINQ技术
1.4.1 初识LINQ to Objects
1.4.2 初识 LINQ to ADO.NET
实例：个人电话薄
1.4.2初识LINQ to XML
实例：RSS DOM查看器
1.5小结
第2章 C#语言新特性及相关知识
2.1 .NET各个版本之间的关系
2.2 C#语言的新特性
2.2.1自动属性和属性访问器的保护级别
2.2.2可空类型
实例：值类型也可以为null
2.2.3泛型
实例：实现一个简单的泛型类
实例：ArrayList和List<T>执行效率
2.2.4委托
实例：委托的多种样式
实例：自定义事件及其事件数据类和利用委托跨线程的数据传递
2.2.5 迭代器与yield关键字
实例：使用yield关键字的迭代器
2.2.6隐式类型的局部变量
实例：反编译查看用var关键字定义的变量类型
2.2.7对象和集合初始化器
对象初始化器
集合初始化器
2.2.8匿名类型
实例：不用写名字也可以创建一个类型
2.2.9扩展方法
实例：不用继承对象给对象增加方法
2.2.10 匿名方法和Lamdba表达式
实例：创建匿名方法
实例：创建Lambda表达式
实例：Lambda表达式树
2.3 综合实例C Sharp高亮编辑及编译运行器
2.4小结
第3章 LINQ 基本子句介绍
3.1 概述
3.2 from子句
3.2.1 单个from子句
实例：使用LINQ查询ArrayList
3.2.2 复合 from 子句
实例：复合from子句查询客户多个电话号码中的号码
3.2.3 多个 from 子句
实例：多个from子句完全交叉联接的电话表
3.3 where子句
3.3.1 常见的where子句查询
3.3.2 在where子句中使用自定义函数
3.3.3 动态谓词的筛选
3.4 select子句
3.4.1 输出查询结果
3.4.2 对查询结果进行投影
3.5 group子句
3.5.1 IGrouping<TKey, TElement>泛型接口
3.5.2 分组查询
3.6 into 子句
3.7 排序子句
3.7.1 OrderBy和OrderByDescending
3.7.2 ThenBy和ThenByDescending
3.8 let子句
3.9 join子句
3.10 小结
第4章 用于集合、文件、字符串对象的LINQ（LINQ to Objects）
4.1 LINQ标准查询运算符概述
4.2 Enumerable类介绍
4.3 用于延期执行的Enumerable类方法成员
4.3.1 Take方法
实例：返回序列的前N个元素
4.3.2 TakeWhile方法
实例：返回序列符合条件的元素1
实例：返回序列符合条件的元素2
4.3.3 Skip方法
实例：跳过序列的前N个元素
4.3.4 SkipWhile方法
实例：跳过序列符合条件的元素1
实例：跳过序列符合条件的元素2
4.3.5 Take、TakeWhile、Skip、SkipWhile小结
实例：用Take和Skip实现分页
4.3.6 Reverse方法
实例：反向显示字符串
4.3.7 Distinct方法
实例：去掉序列中重复的元素
实例：使用自定义比较器过滤序列中重复的元素
4.3.8 Union方法
实例：合并2个数组并去掉重复元素
实例：使用自定义比较器合并2个数组并去掉重复的元素
4.3.9 Concat方法
实例：连接2个数组
4.3.10 Intersect方法
实例：找出2个数组中相同的元素
实例：使用自定义比较器找出2个数组中相同的元素
4.3.11 Except方法
实例：找出2个数组中不同的元素
实例：使用自定义比较器找出2个数组中不同的元素
4.3.12 Range方法
实例：生成从18到26的页码序列
4.3.13 Repeat方法
实例：生成含有5个相同类型元素的序列
4.3.14 Empty方法
实例：生成String类型的空序列
4.3.15 DefaultIfEmpty方法
实例：检测多种类型序列是否为空
实例：使用自定义默认值的DefaultIfEmpty方法
4.3.16 Cast方法
实例：将ArrayList序列转换成泛型序列
4.3.17 OfType方法
实例：用OfType方法转换ArrayList序列转换成泛型序列
4.3.18 AsEnumerable方法
实例：将IQueryable类型转换为IEnumerable类型
4.4 用于立即执行的Enumerable类方法成员
4.4.1 ToArray方法
实例：将序列转换为数组
4.4.2 ToList方法
实例：将序列转换为泛型List<T>
4.4.3 ToDictionary方法
实例：将泛型List<GusetInfo>转换为Dictionary<string,GusetInfo>类型
实例：使用自定义比较器将泛型List<GusetInfo>转换为Dictionary<string,GusetInfo>类型
实例：泛型List<GusetInfo>转换为Dictionary<stirng,string>类型
实例：使用自定义比较器将泛型List<GusetInfo>转换为Dictionary<stirng,string>类型
4.4.4 ToLookup方法
实例：将泛型List<GusetInfo>转换为Lookup<string,GusetInfo>类型
实例：使用自定义比较器将泛型List<GusetInfo>转换为Lookup<string,GusetInfo>类型
实例：泛型List<GusetInfo>转换为Lookup<stirng,string>类型
实例：使用自定义比较器将泛型List<GusetInfo>转换为Lookup<stirng,string>类型
4.4.5 SequenceEqual方法
实例：比较2个序列是否相等
实例：使用自定义比较器比较2个序列是否相等
4.4.6 First方法
实例：返回序列的第一个元素
实例：输出序列中第一个符合条件的元素
4.4.7 FirstOrDefault方法
实例：返回空序列的第一个元素
实例：输出序列中第一个符合条件的元素
4.4.8 Last方法
实例：返回序列的最后一个元素
实例：输出序列中最后一个符合条件的元素
4.4.9 LastOrDefault方法
实例：返回空序列的最后一个元素
实例：输出序列中最后一个符合条件的元素
4.4.10 Single方法
实例：返回序列唯一的元素
实例：输出序列中唯一符合条件的元素
4.4.11 SingleOrDefault方法
实例：返回空序列的唯一元素
实例：输出序列中唯一符合条件的元素
4.4.12 ElementAt方法
实例：返回指定索引位置上的元素
4.4.13 ElementAtOrDefault方法
实例：返回指定索引位置上的元素
4.4.14 All方法
实例：检测全部元素是否符合条件
4.4.15 Any方法
实例：检测序列是否包含元素
实例：使用自定义条件检测序列是否包含元素
4.4.16 Contains方法
实例：检测指定的元素是否存在
实例：使用自定义比较器检测指定的元素是否存在
4.4.17 Count方法
实例：获取序列元素个数
实例：获取符合自定义条件的元素个数
4.4.18 LongCount方法
实例：获取序列元素个数
实例：获取符合自定义条件的元素个数
4.4.19 Aggregate方法
实例：将数组组合为字符串
实例：有初始值的数组累加
实例：有初始值并且经过转换的数组累加
4.4.20 Sum方法
1、普通类型序列求和
2、可空类型序列求和
3、对序列元素使用转换函数求和
实例：使用Sum方法求和
4.4.21 Average方法
1、普通类型序列求平均值
2、可空类型序列求平均值
3、对序列元素使用转换函数求平均值
实例：使用Average方法求平均值
4.4.22 Min方法
1、普通类型序列求最小值
2、可空类型序列求最小值
3、对序列元素使用转换函数求最小值
4、对泛型序列求最小值
实例：使用Min方法求最小值
4.4.23 Max方法
1、普通类型序列求最大值
2、可空类型序列求最大值
3、对序列元素使用转换函数求最大值
4、对泛型序列求最大值
实例：使用Max方法求最大值
4.5综合实例
4.5.1使用Ajax技术的ASP.NET项目：敏感词过滤
4.5.2 WINFORM项目：文件查找和分组
4.5.3 小结
第5章 用于数据库访问的LINQ（LINQ to SQL）
5.1 LINQ to SQL概述
5.2 对象模型的建立
5.2.1数据库对象建立
实例：数据库对象的建立
5.2.2使用Visual Studio 2008建立实体类
实例：使用LINQ TO SQL设计器建立实体类
5.2.3手动建立实体类
实例：手动建立实体类
5.2.4 使用XML映射文件
实例：使用XML映射文件建立实体类
5.3 用于数据库连接的DataContext对象的成员介绍
5.3.1 DataContext构造函数
实例：连接到SQL Server、SQL Server Express
5.3.2 CreateDatabase方法
实例：创建SQL Server Express数据库文件
5.3.3 DatabaseExists方法
实例：检测SQL Server Express数据库是否存在
5.3.4 DeleteDatabase方法
实例：删除SQL Server Express数据库
5.3.5 GetTable方法
实例：使用GetTable方法返回记录
5.3.6 SubmitChanges方法
实例：修改数据库内容
5.3.7 GetChangeSet方法
实例：获取刚刚修改过的对象
5.3.9 Refresh方法
实例：刷新实体对象
5.3.10 ExecuteQuery方法
实例：使用SQL命令返回实体对象
实例：使用SQL命令返回实体对象2
5.3.11 ExecuteCommand方法
实例：使用SQL命令添加数据库记录
5.3.12 Translate方法
实例：取得并转换多个查询结果
实例：取得并转换单个查询结果
实例：取得并转换单个查询结果2
5.3.13 ChangeConflicts属性
5.3.14 Transaction属性
5.3.15 ObjectTrackingEnabled属性
5.3.16 Log属性
实例：用自定义控件显示LINQ to SQL产生的SQL语句
5.4用LINQ操作数据库单一表格
5.4.1 Table<TEntity> 类
5.4.2 Attach方法
实例：使用Attach方法附加实体
实例：使用Attach方法附加实体并同步数据库1
实例：使用Attach方法附加实体并同步数据库2
5.4.3 AttachAll方法
实例：使用AttachAll方法附加实体
实例：使用AttachAll方法附加实体并同步数据库
5.4.4 GetOriginalEntityState方法
实例：使用GetOriginalEntityState方法返回原始实体
5.4.5 GetModifiedMembers方法
实例：使用GetModifiedMembers方法返回实体成员的原始值
5.4.6 InsertOnSubmit方法
实例：使用InsertOnSubmit方法添加数据
5.4.7 InsertAllOnSubmit方法
实例：使用InsertAllOnSubmit方法添加数据
5.4.8 DeleteOnSubmit方法
实例：使用DeleteOnSubmit方法删除数据
5.4.9 DeleteAllOnSubmit方法
实例：使用DeleteAllOnSubmit方法删除数据
5.5 用LINQ操作数据库一对多表格
5.5.1 EntitySet<TEntity>类
5.5.2 Add方法
实例：使用Add方法添加数据
5.5.3 AddRange方法
实例：使用AddRange方法批量添加数据
5.5.4 Insert方法
实例：将实体插入在倒数第2的索引位置上
5.5.5 Remove方法
实例：使用Remove方法删除数据
5.5.6 RemoveAt方法
实例：使用RemoveAt方法删除数据
5.5.7 Clear方法
实例：使用Clear方法删除数据
5.6综合实例：客户产品订单处理系统
5.6.1 数据类
5.6.2序列化与反序列化
5.6.3控制器类
5.6.4界面的数据绑定
5.7小结
第6章 用于XML访问的LINQ（LINQ to XML）
6.1 LINQ to XML概述
6.2 LINQ to XML 基本操作
6.2.1创建XML文档
实例：从INTERNET装载XML文档构建XDocument
6.2.2创建XML元素
实例：给XDocument对象增加元素
6.2.3创建XML属性
实例：使用XAttribute对象创建元素的属性
6.2.4创建XML注释
实例：使用XComment创建元素的注释
6.2.5创建XML声明
实例：使用XDeclaration给XDocument对象增加声明
6.2.6创建XML文档类型
实例：使用XDocumentType给XDocument对象增加文档类型
6.2.7创建XML处理指令
实例：使用XProcessingInstruction给XDocument对象增加处理指令
6.2.8创建XML CData数据
实例：使用XCdata给元素增加CData数据
6.2.9创建XML命名空间
实例：使用XNamespace给元素增加命名空间
6.3使用轴方法处理XML元素
6.3.1 XElement类
实例：构建XElement
6.3.2检索元素的轴方法
实例：使用Element检索子元素
实例：使用Elements、Descendants方法检索子元素集合
实例：使用Ancestors、AncestorsAndSelf方法检索父元素集合
实例：使用ElementsBeforeSelf、ElementsBeforeSelf方法检索元素集合
实例：检索、获取元素的值
6.3.3 添加元素的轴方法
实例：使用Add、AddAfterSelf、AddBeforeSelf、AddFirst方法添加子元素
6.3.4删除元素的轴方法
实例：使用Remove、RemoveAll方法删除元素
6.3.5替换元素的轴方法
实例：使用ReplaceWith方法替换元素
实例：使用ReplaceAll方法替换元素的子节点
6.3.6根据指定的值自动添加、删除、修改子元素
实例：使用SetElementValue处理子元素
6.3.7获取元素属性的轴方法
实例：使用Attributes方法获取元素的属性集合
实例：使用Attribute方法获取元素的属性
6.3.8替换元素属性的轴方法
实例：使用ReplaceAttributes替换元素的属性
6.3.9删除元素的属性的轴方法
实例：使用RemoveAttributes删除元素的属性
6.3.10根据指定的值自动添加、删除、修改元素的属性
实例：使用SetAttributeValue处理元素的属性
6.3.11处理批注的轴方法
实例：使用AddAnnotation方法给元素添加批注
实例：使用Annotations方法获取元素的批注集合
实例：使用RemoveAnnotations方法删除元素的批注
6.4使用LINQ表达式处理XML元素
6.4.1筛选XML元素
实例：编写复杂LINQ表达式查询元素
6.4.2对XML元素进行排序
实例：使用LINQ表达式对XML元素排序
6.4.3对XML元素进行计算
实例：使用LINQ表达式计算XML元素
6.4.4 剔除XML树中符合条件的元素
实例：使用LINQ表达式剔除XML树中的元素
6.4.5 变造XML树
实例：使用LINQ表达式变造XML树
实例：使用LINQ查询运算符变造XML树
6.5使用LINQ to XML序列化XML树
6.5.1输出XML树到字符串
实例：输出到字符串
6.5.2输出XML树到TextWriter对象
实例：输出到TextWriter
6.5.3输出XML树到文件
实例：输出到文件
6.6综合实例：生成并输出RSS聚合内容
6.6.1数据类
6.6.2 建立RSS 对象
6.6.3控制器类
6.6.4界面
6.6.5 运行结果
6.7小结
第7章 综合应用实例：商品管理解决方案
7.1概述
7.2数据库设计
7.3使用LINQ to SQL的数据层、商品管理模型
7.3.1建立数据层
7.3.2收银台及商店模型
7.4 WINFORM项目
7.4.1收银台界面自定义控件
7.4.2控制台窗体
7.5 ASP.NET项目
7.5.1自定义Web控件
7.5.2商品查询、分页显示页面
7.5.3 Webservice数据耦合层
7.6小结
编辑推荐
本书介绍微软最前沿的数据查询编程技术，内容由160个知识点实例加5个综合应用案例组成，光盘中提供了涉及到的全部示例源程序项目，对于将要从事正规商业开发的人员有很强的示范性和指导作用。
媒体评论
青岛纵横纺织品集团公司，总经理、ERP总设计师 赵洪涛：对于我们企业的ERP系统，我经常有一些好的想法，要程序员去实现，但开发进度不能令我满意。最近，开始大规模使用LINQ技术，程序员可以更加专注于业务逻辑的设计，避免了一些繁琐的编码工作，进度情况得到了明显的改善。　
国内著名军事网站，鼎盛军事站长 卢剑锋：我们网站有些功能，是使用LINQ技术开发的，不论操作XML还是字符串或者数据库，代码都非常简练，开发效率成倍提高。
青岛钛悦科技有限公司，技木总监 王文伟：LINQ技术改变了以前的一些代码编写方式，结合Microsoft Visual Studio 2008，大幅度降低了代码出错概率。　
西安圣华电子工程有限责任公司，项目经理 刘骁奖：客户的需求总是不断地变化，我们一直期望能有种新技术，可以更加简便、快速地处理XML文档和数据库。LINQ技术的出现实现了这个愿望，它提供了无与伦比的编程体验，使我们能轻松配合客户的需求变化。