C#的LINQ
LINQ类似SQL查询方法。这东西用起来非常方便,而且可以简化许多代码。但也有缺点,很明显的就是效率没有传统的高,一个查询变量可以理解为一套查询方法,每次要用到具体查询结果时,就会调用一次查询方法(即便是同一个查询方法)。查询有方法查询(类似传统的查询)和查询语法(类似SQL语句),两种语法没有实质区别,但尽量使用查询语法,因为这才是他的迷人之处。
1 . 查询语法
查询变量
- 如果查询返回枚举,查询会到使用枚举的时候才执行。
- 如果枚举被处理多次,查询就会执行多次。
- 枚举前改变数据,枚举结果也会相应改变。
- 如果查询返回标量(数值),查询会立即执行。
查询表达式
查询子句要按照一定顺序。
查询关键字
子句 说明 from 指定数据源和范围变量(类似于迭代变量)。 where 根据一个或多个由逻辑“与”和逻辑“或”运算符分隔的布尔表达式筛选源元素。 select 指定当执行查询时返回的序列中的元素将具有的类型和形式。 group 按照指定的键值对查询结果进行分组。 into 提供一个标识符,它可以充当对 join、group 或 select 子句的结果的引用。 orderby 基于元素类型的默认比较器按升序或降序对查询结果进行排序。 join 基于两个指定匹配条件之间的相等比较来联接两个数据源。 let 引入一个用于存储查询表达式中的子表达式结果的范围变量。 in join 子句中的上下文关键字。 on join 子句中的上下文关键字。 equals join 子句中的上下文关键字。 by group 子句中的上下文关键字。 ascending orderby 子句中的上下文关键字。 descending orderby 子句中的上下文关键字。
2 . 方法语法
标准查询运算符
msdn官方文档:标准查询运算符
《C#图解教程》P373
- 被查询的集合叫序列,序列是必须实现IEnumerable< T >接口)的。C# 入门(14) 枚举器(enumerator)和迭代器(iterator)