先看例子再做一个简单解释吧。

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()进行并集、交集等操作。