19.6 LINQ to Objects

LINQ是一个很不错的特性,除了foreach和for循环,LINQ是另一条访问集合中的数据元素的途径。因为本节是本书第一次涉及到LINQ,故先对LINQ做个系统介绍,包括简介LINQ的技术背景、技术架构以及LINQ的基本用法。

19.6.1 LINQ简介

LINQ(Language Integrated Query,语言集成查询)是从.NET Framework 3.5开始引入的一项创新功能。我们知道,做软件应用开发离不开各种数据源,例如SQL数据库、XML文档等。基本上每种数据源都有自己的查询语言,例如SQL数据库有SQL语言,查询XML文档有XQuery。LINQ的创新之处在于提供了跨各种数据源和文件格式的查询方式。LINQ提供了对如下各种数据源的支持:

❑SQL数据库;

❑XML文档;

❑.NET集合中的对象;

❑ADO.NET数据集;

❑其他提供了LINQ提供程序的数据源。例如可以编写针对LDAP、NHibernate的数据提供器(Data Provider)。

图19-20说明了LINQ的架构,可见LINQ to Objects只是支持LINQ查询的数据源之一。

19.6 LINQ to Objects - 图1

图 19-20 LINQ架构图

接下来,我们结合该结构图对其中的各种数据源进行说明,如表19-12所示。

19.6 LINQ to Objects - 图2

接下来,我们将阐述LINQ的两种不同的查询语法:基于声明的查询语法和基于方法的查询语法。前者类似SQL语法,清晰明了;后者则是CLR确定了解的内容,这些方法称为“标准查询运算符”。事实上,在编译时,查询表达式会转换为使用“标准查询运算符”的方法调用。