LINQ主要的功能就是实现查询,LINQ查询存在以下两种形式。
⑴ Method Synta (查询方法方式):主要利用 System.Linq.Enumerable 类中定义的扩展方法和Lambda 表达式方式进行查询。它提供了一种增强了程序的可读性的语法,易读易写,写时不容易出错。Visual Studio 2010为查询语法提供了完全的智能提示和编译时检查。
例如:
int[] numbers = new int[] { 6, 4, 3, 2, 9, 1, 7, 8, 5 }; //获取数据源(此处由一个数组充当); var numQuery = numbers//numQuery是查询变量,通过右边的查询表达式对查询变量赋值; .Where(p => p % 2 == 0) //查询numbers中能被2整除的元素 .OrderByDescending(p => p) //查询结果按照降序排列 .Select(p => p); //列出所有符合条件的元素
⑵ Query Syntax(查询语句方式):一种更接近 SQL 语法的查询方式,可读性更好。示例代码如下:
int[] numbers = new int[] { 6, 4, 3, 2, 9, 1, 7, 8, 5 }; //获取数据源(此处由一个数组充当); var numQuery = from number in numbers //右边的查询表达式对numQuery查询变量赋值 where number % 2 == 0 //查询numbers中能被2整除的元素 orderby number descending //查询结果按照降序排列 select number; //列出所有符合条件的元素
查询方法和查询语法两者的执行效果完全一样,上面示例中,数据源是一个数组,隐式支持泛型IEnumerable(T)接口,因此可用LINQ对该数组进行查询。
“查询表达式”是用查询语法表示的查询,由一组用类似于 SQL 或 XQuery 的声明性语法编写的子句组成。每个子句又包含一个或多个 C# 表达式,而这些表达式本身又可能是查询表达式或包含查询的表达式。查询表达式必须以 from子句开头,并且必须以 select 或 group 子句结尾。在第一个 from 子句和最后一个 select 或 group 子句之间,查询表达式可以包含一个或多个下列可选子句: where、 orderby、 join、 let 和附加的 from 子句。还可以使用 into 关键字使 join 或 group 子句的结果充当同一查询表达式中附加查询子句的源。
查询子句简介如下:
from 子句 指定数据源和范围变量(类似于迭代变量)。
where 子句 根据一个或多个由逻辑“与”和逻辑“或”运算符(&& 或 ||)分隔的布尔表达式筛选源元素。
select 子句 指定当执行查询时返回的序列中的元素将具有的类型和形式。
group 子句 按照指定的键值对查询结果进行分组。
into子句 提供一个标识符,以便将 group、join 或 select 子句的结果存储到新的标识符中。
orderby子句 基于元素类型的默认比较器按升序或降序对查询结果进行排序。
join 子句 基于两个指定匹配条件之间的相等比较来联接两个数据源。
let 子句 引入一个用于存储查询表达式中的子表达式结果的范围变量。
where 子句 根据一个或多个由逻辑“与”和逻辑“或”运算符(&& 或 ||)分隔的布尔表达式筛选源元素。
select 子句 指定当执行查询时返回的序列中的元素将具有的类型和形式。
group 子句 按照指定的键值对查询结果进行分组。
into子句 提供一个标识符,以便将 group、join 或 select 子句的结果存储到新的标识符中。
orderby子句 基于元素类型的默认比较器按升序或降序对查询结果进行排序。
join 子句 基于两个指定匹配条件之间的相等比较来联接两个数据源。
let 子句 引入一个用于存储查询表达式中的子表达式结果的范围变量。
LINQ 查询操作都由以下三个不同的操作组成:获取数据源、创建查询和执行查询。
从数据集中查询出Id列中值为"rr"数据行,返回datarow的集合:
Method Synta写法:
var rows = this.ds.Tables[0].AsEnumerable().Where(dataRow => dataRow["Id"].ToString() == "rr"). Select(dataRow => dataRow).ToList();
Query Syntax写法:
var rows = (from dataRow in this.ds.Tables[0].AsEnumerable() where dataRow["Id"].ToString() == "rr" select dataRow).ToList();
详细讲解参见:http://download.csdn.net/detail/xunzaosiyecao/8268915
MSDN:点击打开链接