图书目录

目    录

 

第I部分  LINQ基础

 

第1章  LINQ简介 3

1.1  LINQ是什么 3

1.2  为什么需要LINQ 4

1.3  LINQ如何工作 6

1.3.1  关系模型与层/网络模型的

比较 7

1.3.2  操作XML数据 12

1.4  语言集成 14

1.4.1  声明性编程 15

1.4.2  类型检测 16

1.4.3  透明跨越不同的类型系统 17

1.5  LINQ实现形式 17

1.5.1  LINQ to Objects 17

1.5.2  LINQ to ADO.NET 18

1.5.3  LINQ to XML 19

1.6  小结 19

第2章  LINQ语法基础 20

2.1  LINQ查询 20

2.1.1  查询语法 20

2.1.2  完整的查询语法 24

2.2  查询关键字 25

2.2.1  from子句 25

2.2.2  where子句 28

2.2.3  select子句 28

2.2.4  group和into子句 29

2.2.5  orderby子句 31

2.2.6  join子句 32

2.2.7  let子句 36

2.2.8  其他的Visual Basic 2008

关键字 36

2.3  延迟查询求值和扩展方法解析 37

2.3.1  延迟查询求值 37

2.3.2  扩展方法解析 38

2.4  关于LINQ查询的最后一些思考 40

2.4.1  退化查询表达式 40

2.4.2  异常处理 41

2.5  小结 43

第3章  LINQ to Objects 44

3.1  查询操作符 47

3.1.1  Where操作符 47

3.1.2  投影操作符 48

3.1.3  排序操作符 52

3.1.4  分组操作符 56

3.1.5  联接操作符 59

3.1.6  集合操作符 63

3.1.7  聚合操作符 68

3.1.8  Visual Basic 2008中的

聚合操作符 76

3.1.9  生成操作符 78

3.1.10  量词操作符 80

3.1.11  分区操作符 82

3.1.12  元素操作符 85

3.1.13  其他操作符 89

3.2  转换操作符 90

3.2.1  AsEnumerable 90

3.2.2  ToArray和ToList 92

3.2.3  ToDictionary 93

3.2.4  ToLookup 94

3.2.5  OfType和Cast 96

3.3  小结 96

 

第II部分  针对关系数据的LINQ

 

第4章  LINQ to SQL:查询数据 99

4.1  LINQ to SQL中的实体 99

4.2  数据建模 103

4.2.1  DataContext类 103

4.2.2  实体类 104

4.2.3  实体继承 106

4.2.4  唯一的对象标识符 108

4.2.5  实体约束 109

4.2.6  实体间的关联 109

4.2.7  关系模型与分层模型的

对比 116

4.3  数据查询 116

4.3.1  投影 118

4.3.2  存储过程和用户

自定义函数 120

4.3.3  编译查询 127

4.3.4  查询数据的不同方法 129

4.3.5  直接查询 131

4.3.6  实体的延迟载入 133

4.3.7  属性的延迟载入 135

4.3.8  访问只读的DataContext 136

4.3.9  LINQ to SQL的局限性 137

4.4  在LINQ to SQL的环境中

进行思考 138

4.4.1  IN/EXISTS子句 138

4.4.2  精简的SQL查询 141

4.4.3  .NET代码与SQL查询的

混合 142

4.5  小结 145

第5章  LINQ to SQL:管理数据 146

5.1  CRUD和CUD操作 146

5.1.1  实体更新 146

5.1.2  数据库更新 153

5.1.3  自定义插入、更新和

删除操作 157

5.2  数据库交互 158

5.2.1  并发操作 158

5.2.2  事务 162

5.2.3  异常 163

5.3  数据库和实体 164

5.3.1  保留有效关系的实体属性 164

5.3.2  派生实体类 166

5.3.3  附加实体 168

5.3.4  绑定元数据 172

5.3.5  .NET和SQL类型体系的

区别 174

5.4  小结 175

第6章  LINQ to SQL的工具 176

6.1  文件类型 176

6.1.1  DBML(数据库标记语言) 176

6.1.2  C#和Visual Basic源代码 178

6.1.3  XML(外部的映射文件) 180

6.1.4  LINQ to SQL文件的生成 181

6.2  SQLMetal 183

6.2.1  从数据库生成DBML文件 183

6.2.2  从数据库生成源代码和

映射文件 184

6.2.3  从DBML文件生成源代码和

映射文件 185

6.3  使用对象关系设计器 185

6.3.1  DataContext的属性 188

6.3.2  实体类 189

6.3.3  实体间的关联 192

6.3.4  实体继承 198

6.3.5  存储过程和用户

自定义函数 199

6.3.6  视图和架构支持 202

6.4  小结 203

第7章  LINQ to DataSet 204

7.1  LINQ to DataSet简介 204

7.2  使用LINQ载入数据集 204

7.2.1  用LINQ to SQL载入

数据集 205

7.2.2  用LINQ to DataSet载入

数据 207

7.3  使用LINQ查询数据集 208

7.3.1  内部的

DataTable.AsEnumerable 210

7.3.2  用LINQ创建DataView

实例 211

7.3.3  使用LINQ查询具有类型的

DataSet 212

7.3.4  访问没有类型的DataSet

数据 213

7.3.5  DataRow比较 213

7.4  小结 214

第8章  LINQ to Entities 215

8.1  查询实体数据模型 215

8.1.1  概述 215

8.1.2  查询表达式 217

8.2  管理数据 223

8.3  查询引擎 223

8.3.1  查询的执行 223

8.3.2  深入ObjectQuery<T> 227

8.3.3  经过编译的查询 229

8.4  LINQ to SQL和LINQ to Entities 230

8.5  小结 230

 

第III部分  LINQ和XML

 

第9章  LINQ to XML:

管理XML Infoset 233

9.1  LINQ to XML简介 233

9.2  LINQ to XML编程 236

9.2.1  XDocument 237

9.2.2  XElement 238

9.2.3  XAttribute 241

9.2.4  XNode 242

9.2.5  XName和XNamespace 243

9.2.6  其他的X*类 248

9.2.7  XStreamingElement 249

9.2.8  XObject和Annotations 250

9.3  读取、遍历与改变XML 253

9.4  小结 255

第10章  LINQ to XML:查询节点 256

10.1  查询XML 256

10.1.1  Attribute和Attributes 256

10.1.2  Element和Elements 257

10.1.3  “类似”扩展方法的

  XPath轴 258

10.1.4  XNode选择方法 262

10.1.5  InDocumentOrder 264

10.2  延迟的查询求值 264

10.3  对XML的LINQ查询 265

10.4  使用LINQ to XML转换XML 271

10.5  支持XSD和类型节点的有效性 273

10.6  支持XPath和System.Xml.XPath 276

10.7  LINQ to XML的安全性 278

10.8  LINQ to XML序列化 279

10.9  小结 280

 

第IV部分  高级LINQ

 

第11章  表达式目录树详解 283

11.1  lambda表达式 283

11.2  什么是表达式目录树 285

11.2.1  创建表达式目录树 286

11.2.2  封装 287

11.2.3  不可变和修改 289

11.3  解析表达式目录树 293

11.3.1  Expression类 295

11.3.2  表达式目录树节点类型 296

11.3.3  实用节点 299

11.4  访问表达式目录树 302

11.5  动态构建表达式目录树 312

11.5.1  编译器如何产生表达式

 目录树 312

11.5.2  合并现有的表达式目录树 315

11.5.3  动态组成表达式目录树 319

11.6  小结 323

第12章  扩展LINQ 324

12.1  自定义操作符 324

12.2  现有操作符的特化 328

12.2.1  危险的做法 331

12.2.2  特化的限制 332

12.3  创建自定义的LINQ提供程序 340

12.3.1  IQueryable接口 341

12.3.2  从IEnumerable到IQueryable

 与从IQueryable到

 IEnumerable 343

12.3.3  IQueryable和IQueryProvider

 的本质 345

12.3.4  编写FlightQueryProvider 348

12.4  小结 370

第13章  并行LINQ 371

13.1  .NET Framework并行扩展 371

13.1.1  Parallel.For和Parallel.ForEach

 方法 371

13.1.2  Do方法 373

13.1.3  Task类 374

13.1.4  Future<T>类 375

13.1.5  并发考虑 376

13.2  使用PLINQ 378

13.2.1  PLINQ使用的线程 378

13.2.2  PLINQ的实现形式 381

13.2.3  PLINQ的用法 382

13.2.4  并行执行的副作用 385

13.2.5  PLINQ的异常处理 388

13.2.6  PLINQ和其他的LINQ

 实现形式 389

13.3  小结 391

第14章  其他的LINQ实现形式 392

14.1  数据库访问 392

14.2  没有数据库的数据访问 393

14.3  LINQ to Entity域模型 394

14.4  LINQ to Services 394

14.5  系统工程师的LINQ 395

14.6  动态的LINQ 396

14.7  其他的LINQ增强功能和工具 396

14.8  小结 397

 

第V部分  LINQ的应用

 

第15章  在多层解决方案中的LINQ 401

15.1  多层解决方案的特征 401

15.2  两层解决方案中的LINQ to SQL 403

15.3  在n层解决方案中的LINQ 404

15.3.1  用LINQ to SQL替代

 DAL 404

15.3.2  用XML外部映射抽取

 LINQ to SQL 405

15.3.3  在实际的抽象内容中使用

 LINQ to SQL 408

15.3.4  用LINQ to XML作为

 数据层 415

15.3.5  用LINQ to Entities作为

 数据层 419

15.4  在业务层中的LINQ 419

15.4.1  优化代码的LINQ to

 Objects 420

15.4.2  IQueryable<T>与

 IEnumerable<T>的对比 422

15.4.3  识别正确的工作单元 425

15.4.4  处理事务 426

15.4.5  并发性和线程安全 426

15.5  小结 426

第16章  LINQ和ASP.NET 427

16.1  ASP.NET 3.5 427

16.1.1  ListView 427

16.1.2  ListView数据绑定 430

16.1.3  DataPager 434

16.2  LinqDataSource 438

16.2.1  用LinqDataSource和

 DataPager分页数据 443

16.2.2  用LinqDataSource处理数据

 修改 446

16.2.3  用LinqDataSource进行

 自定义选取 449

16.2.4  使用具有自定义类型的

 LinqDataSource 450

16.3  绑定LINQ查询 452

16.4  小结 456

第17章  LINQ和WPF/Silverlight 457

17.1  与WPF一起使用LINQ 457

17.1.1  绑定单个实体和属性 457

17.1.2  绑定实体集 461

17.2  与Silverlight一起使用LINQ 465

17.3  小结 466

第18章  LINQ和Windows

          通信层编程框架 467

18.1  WCF综述 467

18.1.1  WCF协议和服务 468

18.1.2  面向服务的协议 471

18.1.3  端点和服务宿主 472

18.1.4  服务用户 474

18.2  WCF和LINQ to SQL 477

18.2.1  LINQ to SQL的实体和

 序列化 477

18.2.2  用WCF发布LINQ to SQL的

 实体 481

18.2.3  采取WCF使用LINQ to SQL

 的实体 484

18.3  LINQ to Entities和WCF 487

18.4  查询表达式序列化 495

18.5  小结 496

 

第VI部分  附    录

 

附录A  ADO.NET实体框架 501

A.1  ADO.NET的标准方法 501

A.2  从物理层抽取 504

A.3  实体数据模型 506

A.3.1  实体数据模型文件 506

A.3.2  实体数据模型设计器和

向导 511

A.3.3  实体数据模型生成工具 514

A.3.4  实体数据模型规则和定义 515

A.4  用ADO.NET查询实体 515

A.5  用LINQ查询ADO.NET实体 522

A.6  用对象服务管理数据 523

A.6.1  对象身份管理 525

A.6.2  事务性操作 526

A.7  手动实现的实体 526

A.8  LINQ to SQL和ADO.NET

实体框架 527

A.9  小结 527

附录B  C# 3.0:新语言特征 528

B.1  重温C# 2.0 528

B.1.1  泛型 528

B.1.2  委托 530

B.1.3  匿名方法 532

B.1.4  枚举量和Yield 533

B.2  C# 3.0特征 539

B.2.1  自动实现的属性 539

B.2.2  本地类型推断 540

B.2.3  lambda表达式 543

B.2.4  扩展方法 548

B.2.5  对象初始化表达式 554

B.2.6  匿名类型 559

B.2.7  查询表达式 563

B.2.8  局部方法 564

B.3  小结 566

附录C  Visual Basic 2008:

新语言特征 567

C.1  Visual Basic 2008和可空类型 567

C.2  If操作符 568

C.3  Visual Basic 2008对应于C# 3.0的

特征 570

C.3.1  本地类型推断 570

C.3.2  扩展方法 571

C.3.3  对象初始化表达式 573

C.3.4  匿名类型 575

C.3.5  查询表达式 578

C.3.6  lambda表达式 580

C.3.7  闭包 581

C.3.8  局部方法 582

C.4  Visual Basic 2008和C# 3.0不对应的

 特征 583

C.4.1  XML支持 584

C.4.2  非严格委托 589

C.5  C# 3.0和Visual Basic 2008

不对应的特征 590

C.5.1  yield关键字 590

C.5.2  匿名方法 591

C.6  小结 591