通吃多种数据源查询的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具有如下优点:

42-f14-1.jpg
图1

* 易学。如果你会使用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 studentQuery = 保存查询结果

from student in app.students 查询students数组的数据

where student.Score > 90 条件是分数大于90

orderby student. Score 用orderby实现按成绩排序

select student; 查询students数组的数据

代码运行后,效果如图2所示。

42-f14-2.jpg
图2

总结

虽然上面的例子只是查询数组中的数据,但是不需要修改太多代码,只要我们使用不同的Provider(LINQ数据提供程序),就可以操作其他的数据源。

使用LINQ,可以使我们不用花时间去考虑数据源的操作,而将更多的时间放到其他功能的实现上,对减少项目开发的时间实在是大有益处。相信看了上面这些,你也一定对LINQ大感兴趣,现在就来试试“一切皆可查询” 的开发方式吧。