3.8 LINQ简介
语言集成查询(LINQ)是在2008年发布的编译器版本中引入的功能,可以为开发人员提供高效的查询功能。LINQ采用了全新的语法标准、全新的数据查询和更新模式,该技术可以扩展为几乎支持任何类型的数据存储。VS2010包含了LINQ提供的程序集,使用这些程序集,能将LINQ用于.NET Framework集合、SQL Server数据库、ADO.NET数据集和XML文档等的操作。
3.8.1 什么是LINQ
语言集成查询(LINQ)是在2008年发布的版本中发布的一项创新功能,在后续的版本中进行了完善和补充。
以前针对数据的查询都是以简单的字符串发送给数据库执行,然后返回结果,没有编译时进行类型检查或对IntelliSense支持。还必须针对以下各种数据源学习一种不同的查询语言:SQL数据库、XML文档、各种Web服务等。LINQ使查询成为编程语言中的一流语言构造。用户可以使用语言关键字和熟悉的运算符针对强类型化对象集合编写查询。图3-22显示了一个用C#语言编写的、不完整的LINQ查询,该查询针对SQL Server数据库,并具有完全类型检查和IntelliSense支持。
图3-22 LINQ体系结构
在VS 2010中,可以为以下数据源编写LINQ查询:SQL Server数据库、XML文档、ADO.NET数据集,以及支持IEnumerable或泛型IEnumerable<T>接口的任意对象集合。此外,还对ADO.NET Entity Framework的LINQ支持,并且第三方为许多Web服务和其他数据库实现编写了LINQ提供程序。
LINQ查询既可在新项目中使用,也可在现有项目中与非LINQ查询一起使用。
3.8.2 LINQ示例
查询是一种从数据源检索数据的方法。查询采用专门的查询语言来表示。开发人员已经为各种数据源开发了不同的语言,例如,用于关系数据库的SQL和用于XML的XQuery。开发人员不得不针对它们必须支持的每种数据源或数据格式学习新的查询语言。
LINQ的出现解决了这一难题,LING通过提供一种跨各种数据源和数据格式使用数据的一致模型。在LINQ查询中,始终会用到对象,可以使用相同的基本编码模式来查询和转换XML文档、SQL数据库、ADO.NET数据集、.NET集合中的数据及对其用LINQ提供程序可用的任何其他格式的数据。
所有LINQ查询操作都由以下三个不同的操作组成:获取数据源、创建查询和执行查询。
下面示例演示如何用源代码表示查询操作的三个部分。此示例将一个整数数组用作数据源,其中涉及的概念同样适用于其他数据源。代码如下。
输出结果如图3-23所示。
图3-23 LINQ查询的结果
上面的代码查询指定要从数据源中检索的信息。查询还可以指定在返回这些信息之前如何对其进行排序、分组和结构化。查询存储在查询变量中,并用查询表达式进行初始化。为使编写查询工作变得更容易,VS 2010引入了新的查询语法。
上面示例中的查询从整数数组中返回所有偶数,该查询表达式包含三个子句:from、where和select。from子句指定数据源,where子句指定了条件,select子句指定返回元素的类型。注意,在LINQ中,查询变量本身不执行任何操作,并且不返回任何数据,它只是将查询方式存储在系统内存中,在以后使用时,从中提取需要的信息。