先看例子再做一个简单解释吧。
using System;
using System.Linq;
namespace Com.LoonStudio {
class Program {
static void Main(string[] args) {
int[] x = { 13, 36, 5, 29, 10, 12, 40, 56 };
var y = from temp in x where temp % 2 == 0 orderby temp select temp;
foreach (int z in y) {
Console.Write(z + "\t");
}
Console.WriteLine();
}
}
}
上面的例子将数组x中的偶数按照从小到大的顺序取出来。
作为软件开发人员,我们会有很多的程序会获取和操作各种各样的数据,这里的数据不仅仅是存储在关系数据库中的信息,也包括XML文档,本地内存中的DataSet,从WCF服务返回的数据等等。在.NET 3.5以前的版本中,与特定类型的数据打交道时,程序员要使用不同的API。LINQ(语言集成查询) API的意图是提供一种统一且对称的方式,让程序员在广义的数据上得到和操作数据。通过使用LINQ,我们能够在C#中直接创建被称为查询表达式的实体,如上面程序的第8行。
C#定义了很多查询操作符
from、in --- 用于定义LINQ表达式的主干,允许从合适的容器中提取数据子集
where --- 用于定义从一个容器里数据的限制条件
select --- 用于从容器中选择一个序列
join、on、equals、into --- 基于指定的键来做关联操作
orderby、ascending、descending --- 指定按照升序或降序进行排列
group、by --- 用指定的值对数据进行分组
在使用LINQ进行查询时,还可以动态生成新的匿名类型,例如:from p in products select new { p.Name, p.Description }。
如果需要还可以通过Reverse()方法反转结果集,还可以使用Union()、Intersect()、Concat()、Except()进行并集、交集等操作。