第一篇 LINQ基础
第1章 LINQ概述 3
1.1 什么是LINQ 3
1.1.1 查询与LINQ 3
1.1.2 LINQ基本架构 4
1.1.3 LINQ基本组成组件 5
1.1.4 LINQ与ADO.NET 5
1.2 搭建开发环境 6
1.2.1 安装Visual Studio 2008 6
1.2.2 配置Visual Studio 2008 8
1.3 第一个使用LINQ的Web应用程序 9
1.3.1 创建使用LINQ的Web应用程序 9
1.3.2 使用LINQ查询数据 11
1.3.3 配置与LINQ相关的程序集 12
1.3.4 运行使用LINQ的Web应用程序 12
1.3.5 IEnumerable和IEnumerableT接口 13
1.3.6 IQueryable和IQueryableT接口 14
1.3.7 与LINQ相关的命名空间 15
1.4 LINQ查询数据优势展现 15
1.4.1 查询集合中的数据 16
1.4.2 查询数据库中的数据 17
1.4.3 查询DataSet对象中的数据 20
1.4.4 查询XML文件 22
第2章 LINQ语法基础——C# 3.0 25
2.1 C# 3.0概述 25
2.2 使用var创建隐型局部变量 26
2.3 对象和集合初始化器 28
2.3.1 对象初始化器 28
2.3.2 集合初始化器 30
2.4 创建匿名类型的对象 31
2.5 创建隐型数组 34
2.6 Lambda表达式 34
2.6.1 Lambda表达式的输入参数 34
2.6.2 Lambda表达式的语句 35
2.6.3 查询中的Lambda表达式 35
2.6.4 Lambda表达式转换 36
2.7 查询表达式 36
2.7.1 查询表达式基础 36
2.7.2 查询表达式的基本子句 38
第二篇 LINQ查询初步
第3章 LINQ查询概述 41
3.1 准备用于LINQ查询的数据源 41
3.1.1 准备集合类型的数据源 41
3.1.2 准备DataSet类型的数据源 42
3.1.3 准备SQL Server数据库类型的数据源 43
3.1.4 准备XML类型的数据源 44
3.2 创建LINQ查询表达式 44
3.2.1 创建查询集合类型的查询表达式 44
3.2.2 创建查询DataSet类型的查询表达式 45
3.2.3 创建查询SQL Server数据库类型的查询表达式 45
3.2.4 创建查询XML类型的查询表达式 45
3.3 执行LINQ查询 46
第4章 LINQ查询子句 47
4.1 LINQ查询子句概述 47
4.2 基本子句 48
4.2.1 from子句 48
4.2.2 where子句 52
4.2.3 select子句 54
4.2.4 group子句 56
4.2.5 orderby子句 57
4.2.6 into子句 59
4.2.7 join子句 61
4.2.8 let子句 65
第5章 LINQ查询操作 67
5.1 查询操作概述 67
5.2 筛选操作Where 70
5.3 投影操作 71
5.3.1 选择操作Select 71
5.3.2 选择多个序列操作SelectMany 72
5.4 排序操作 73
5.4.1 按主关键字升序排序操作OrderBy 73
5.4.2 按主关键字降序排序操作OrderByDescending 74
5.4.3 按次要关键字升序排序操作ThenBy 75
5.4.4 按次关键字降序排序操作ThenByDescending 77
5.4.5 顺序反转操作Reverse 78
5.5 聚合操作 79
5.5.1 计算元素数量操作Count 79
5.5.2 求和操作Sum 80
5.5.3 最大值操作Max 81
5.5.4 最小值操作Min 82
5.5.5 平均值操作Average 83
5.5.6 聚合计算操作Aggregate 83
5.5.7 计算元素数量操作LongCount 84
5.6 集合操作 85
5.6.1 去掉集合中的重复元素操作Distinct 86
5.6.2 差集操作Except 87
5.6.3 交集操作Intersect 89
5.6.4 并集操作Union 90
5.7 元素操作 91
5.7.1 获取指定元素操作ElementAt 92
5.7.2 获取指定元素或默认值操作ElementAtOrDefault 93
5.7.3 获取第一个元素操作First 93
5.7.4 获取第一个元素或默认值操作FirstOrDefault 94
5.7.5 获取最后一个元素操作Last 95
5.7.6 获取最后一个元素或默认值操作LastOrDefault 96
5.7.7 获取单个元素操作Single 97
5.7.8 获取单个元素或默认值操作SingleOrDefault 97
5.8 数据类型转换操作 98
5.8.1 转换为泛型集合操作AsEnumerable 99
5.8.2 转换为序列操作AsQueryable 100
5.8.3 转换元素数据类型操作Cast 101
5.8.4 筛选指定类型元素操作OfType 101
5.8.5 转换为泛型列表操作ToList 102
5.8.6 转换为数组操作ToArray 103
5.8.7 转换为字典操作ToDicionary 104
5.8.8 转换为一对多字典操作ToLookup 104
5.9 生成操作 105
5.9.1 创建包含默认元素或空值的集合操作DefaultIfEmpty 106
5.9.2 创建空序列操作Empty 107
5.9.3 创建指定范围值的序列操作Range 107
5.9.4 创建重复元素序列的操作Repeat 108
5.10 限定符操作 108
5.10.1 检查序列所有元素是否满足 指定条件的操作All 109
5.10.2 检查序列是否存在满足指定 条件的操作Any 110
5.10.3 检查序列是否包含指定元素 的操作Contains 110
5.11 数据分区操作 111
5.11.1 跳过指定元素的操作Skip 112
5.11.2 跳过满足指定条件的元素的 操作SkipWhile 113
5.11.3 提取指定元素的操作Take 114
5.11.4 提取满足指定条件的元素的 序列TakeWhile 114
5.12 联接操作 115
5.12.1 联接操作Join 116
5.12.2 分组联接操作GroupJoin 118
5.13 相等操作SequenceEqual 120
5.14 串联操作Contact 121
第三篇 LINQ to SQL
第6章 LINQ to SQL对象模型 125
6.1 LINQ to SQL概述 125
6.2 使用Visual Studio 2008创建DBML文件 128
6.2.1 创建DBML文件 129
6.2.2 LINQ代码生成工具SqlMetail.exe 131
6.2.3 创建UserInfo表的实体类 132
6.2.4 创建UserInfo表的实体类的属性 133
6.2.5 创建LinqDB数据库的数据上下文的方法 134
6.3 处理EntitySetT类型的结果 137
6.3.1 计算实体数量的Count属性 137
6.3.2 实体项集合的Item属性 137
6.3.3 是否已加载或分配值的HasLoadedOrAssignedValues属性 139
6.3.4 是否具有延迟查询的IsDeferred属性 139
6.3.5 添加实体的Add()方法 141
6.3.6 添加实体集合的AddRange()方法 142
6.3.7 插入实体的Insert()方法 144
6.3.8 移除实体的Remove()方法 145
6.3.9 移除指定索引的实体RemoveAt()方法 146
6.3.10 移除所有实体的Clear()方法 147
6.3.11 查找实体索引的IndexOf() 方法 148
6.3.12 查找是否包含实体的 Contains()方法 149
6.3.13 分配集合的Assign()方法 150
6.3.14 返回实体枚举的GetEnumerator()方法 151
6.4 处理EntityRefT类型的结果 153
6.5 处理IExecuteResult类型的结果 155
6.6 处理ISingleResultT类型的结果 156
6.7 处理IMultipleResults类型的结果 158
第7章 数据上下文 160
7.1 DataContext概述 160
7.2 DataContext类的属性 162
7.2.1 连接属性Connection 162
7.2.2 事务属性Transaction 162
7.2.3 执行命令的最大时间属性CommandTimeout 164
7.2.4 冲突对象集合属性ChangeConflicts 164
7.2.5 是否延时加载关系属性DeferredLoadingEnabled 166
7.2.6 数据导入选项属性LoadOptions 166
7.2.7 日志属性Log 167
7.3 DataContext类的方法 169
7.3.1 检测数据库是否存在的DatabaseExists()方法 169
7.3.2 创建数据库的CreateDatabase()方法 170
7.3.3 删除数据库的DeleteDatabase()方法 171
7.3.4 执行SQL命令的ExecuteCommand()方法 171
7.3.5 执行SQL查询的ExecuteQuery()方法 172
7.3.6 提交更改到数据库的SubmitChanges()方法 174
7.3.7 获取命令信息的GetCommand()方法 174
7.3.8 获取表集合的GetTable()方法 175
7.3.9 获取已修改对象的GetChangeSet()方法 176
7.3.10 转换IDataReader对象的 Translate()方法 178
7.3.11 刷新对象状态的Refresh() 方法 179
第8章 使用LINQ查询和操作数据库 181
8.1 查询数据库中的数据 181
8.1.1 简单查询 183
8.1.2 复杂查询 184
8.1.3 排序数据 185
8.1.4 聚合查询 186
8.1.5 分组查询 187
8.2 操作数据库中的数据 189
8.2.1 向数据库中插入数据 189
8.2.2 修改数据库中的数据 191
8.2.3 删除数据库中的数据 193
8.2.4 使用存储过程查询单表数据 195
8.2.5 使用存储过程查询多表数据 197
8.2.6 使用存储过程操作数据 199
8.2.7 使用函数过滤数据 203
第四篇 LINQ to Objects、DataSet和XML
第9章 LINQ to Objects 209
9.1 LINQ to Objects概述 209
9.2 使用LINQ操作集合 209
9.2.1 操作静态数组 210
9.2.2 操作动态数组 211
9.2.3 操作泛型列表ListT 213
9.2.4 操作泛型排序列表SortedListTKey,TValue 214
9.2.5 操作泛型双向链表LinkedListT 216
9.2.6 操作泛型队列QueueT 216
9.2.7 操作泛型堆栈StackT 218
9.2.8 操作泛型哈希集HashSetT 219
9.2.9 操作泛型字典DictionaryTKey, TValue 221
9.2.10 操作泛型排序字典 SortedDictionaryTKey,TValue 221
9.2.11 操作泛型通用集合 CollectionT 223
9.2.12 操作泛型绑定列表 BindingListT 224
9.3 使用LINQ操作字符串 226
9.3.1 查找指定的字符 226
9.3.2 查找指定的字符串 227
9.3.3 词频统计 228
9.3.4 LINQ查询使用正则表达式处理字符串 230
9.4 使用LINQ操作文件目录 232
9.4.1 查询指定名称的文件 232
9.4.2 查询指定扩展名的文件 233
9.4.3 查询指定属性的文件 234
9.4.4 统计文件夹的大小 235
9.4.5 比较两个文件夹中是否存在同名文件 236
9.4.6 查询文件夹所有文件的内容 237
第10章 LINQ to DataSet 239
10.1 LINQ to DataSet概述 239
10.2 DataTableExtensions类 241
10.2.1 AsDataView()方法 241
10.2.2 AsEnumerable()方法 242
10.2.3 CopyToDataTable()方法 244
10.3 DataRowExtensions类 245
10.3.1 泛型FieldT()方法 246
10.3.2 泛型SetFieldT()方法 247
10.4 使用LINQ查询DataSet 249
10.4.1 查询DataSet中的单个表 249
10.4.2 查询DataSet中的多个表 250
10.4.3 使用投影操作查询DataSet 253
10.4.4 使用筛选操作查询DataSet 253
10.4.5 使用排序操作查询DataSet 255
10.4.6 使用聚合操作查询DataSet 256
10.4.7 使用元素操作查询DataSet 258
10.4.8 使用联接操作查询DataSet 259
10.4.9 使用数据分区操作查询DataSet 260
10.4.10 使用集合操作比较DataRow 262
10.5 使用LINQ查询DataView 264
10.5.1 使用LINQ过滤数据 264
10.5.2 使用LINQ排序数据 266
10.5.3 使用LINQ创建DataView 267
第11章 LINQ to XML 269
11.1 LINQ to XML概述 269
11.2 LINQ to XML基础类 271
11.2.1 XElement类 271
11.2.2 XAttribute类 273
11.2.3 XDocument和XDeclaration类 275
11.2.4 XComment类 277
11.2.5 XNamespace类 278
11.2.6 LINQ to XML其他基础类 280
11.3 使用LINQ to XML查询XML文件 281
11.3.1 读取XML文件 281
11.3.2 查询根元素 281
11.3.3 查询指定名称的元素 283
11.3.4 查询指定属性的元素 284
11.3.5 查询指定元素的子元素 284
11.3.6 查询元素并排序 286
11.3.7 查询元素并计算指定的值 287
11.4 使用LINQ to XML操作XML文件 288
11.4.1 创建XML文件 288
11.4.2 添加元素到XML文件 289
11.4.3 修改XML文件中的元素 291
11.4.4 删除XML文件中的元素 292
11.4.5 将XML文件中的属性转换为元素 293
第五篇 LINQ应用
第12章 LINQ在ASP.NET中的应用 299
12.1 使用LINQ数据源控件 299
12.2 使用LINQ为文本框提供数据 303
12.3 使用LINQ为列表控件提供数据 305
12.4 使用LINQ为Repeater控件提供数据 307
12.5 使用LINQ为DataList控件提供数据 309
12.6 使用LINQ为GridView控件提供数据 311
12.7 使用LINQ为ListView控件提供数据 313
第13章 LINQ在Windows窗体中的应用 316
13.1 创建Windows窗体应用程序 316
13.2 使用LINQ数据源控件 318
13.3 使用LINQ为文本框提供数据 319
13.4 使用LINQ为列表控件提供数据 320
13.5 使用LINQ为DataGridView控件提供数据 320
13.6 使用LINQ为ListView控件提供数据 321
13.7 初始化MainForm窗体 322
13.8 运行Windows窗体应用程序 322