通吃多种数据源查询的LINQ
技术与开发
作为程序员,每天都要跟各种数据打交道,而使用不同的数据源又要用特定的查询技术,例如要访问XML文件,就需要会用XPath;使用SQL Server,就要会写SQL语句。对此,你是不是感到很烦心?有没有一种可以通吃多种数据源的查询技术?试试.Net Framework 3.0新增的LINQ吧,有了它就可以节省很多时间!
LINQ,即.NET 语言集成查询(.NET Language-Integrated Query)的缩写,是.Net Framework 3.0提供的新特性。它提供了适用于所有数据源(而不只是数据库或 XML 数据)的通用查询工具,允许我们使用.NET支持的语言直接编写LINQ查询语句操作数据,而不用考虑具体数据源的特性。LINQ的具体架构如图1所示。相对于以前的方法,LINQ具有如下优点:

* 易学。如果你会使用C#或者Visual Basic,你就已经掌握了使用LINQ需要的大部分知识
* 易用。LINQ使用统一的语法,不用考虑查询的是何种数据源
* 提高开发效率。在编译时就可以发现错误,以及智能感知和调试支持
如何使用LINQ
一个LINQ查询操作可以分为3个步骤:首先是指定数据源。然后是创建查询表达式,查询表达式由3个部分组成:from子句,表示你要查询什么数据;where子句,表示如何过滤数据;select子句,表示你要返回什么数据。最后一步就是执行查询表达式,就可以得到结果了。
在LINQ里,还可以对查询的结果进行排序。我们可以使用OrderBy让数据按正序输出,语法为“orderby 排序字段”,而倒序就是“OrderBy…descending”。
下面我们用一个实例来看看LINQ的使用方法。假设有一组包含了所有学生的成绩的数据,现在我们要查询出其中分数高于90分的学生。
首先,要使用LINQ必须先安装Visual Studio 2008。然后,打开VS2008,使用C#新建一个控制台程序,命名为LINQtest,输入代码即可,关键代码如下:
IEnumerable
from student in app.students 查询students数组的数据
where student.Score > 90 条件是分数大于90
orderby student. Score 用orderby实现按成绩排序
select student; 查询students数组的数据
代码运行后,效果如图2所示。

总结
虽然上面的例子只是查询数组中的数据,但是不需要修改太多代码,只要我们使用不同的Provider(LINQ数据提供程序),就可以操作其他的数据源。
使用LINQ,可以使我们不用花时间去考虑数据源的操作,而将更多的时间放到其他功能的实现上,对减少项目开发的时间实在是大有益处。相信看了上面这些,你也一定对LINQ大感兴趣,现在就来试试“一切皆可查询” 的开发方式吧。