1、Linq查询操作包含以下三个不同的、独立的动作:
获取数据源
创建查询
执行查询
2、Linq查询的执行分为两种:
※延迟执行
创建查询时,查询变量本身不执行查询,不包含任何数据,也不会采取其他任何形式的动作。它只不过是一个查询占位符,是一个IEnumerable对象,当枚举此对象的元素时,查询才得以执行。
※立即执行
任何返回单个值的Linq查询都会被立即执行,如Count、Max等,也可以通过调用ToList、ToArray方法来强制查询立即执行。当希望对查询的结果进行缓存时这种做法很有用。
3、T-SQL查询按照下面的顺序以一定的逻辑处理查询:
(8) select
(9) top
(1) from
(3) join
(2) on
(4) where
(5) group by
(6) with
(7) having
(10) order by
Linq查询和T-SQL查询的执行很相似。
4、当类型已知时尽量少使用var,过多的使用会降低源代码对后续开发人员的可读性。
5、Linq Provider是一个库,能实现标准查询操作符为某种特定类型的数据源所提供的功能,它的责任是执行一个给定的查询或将其交给另一个引擎来执行。Linq有多个提供程序:Linq to XML,Linq to Datasets,Linq to Objects,Linq to SQL。
6、int[] number1 = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int[] number2 = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
var f1 = number1.SequenceEqual(number2);
var f2 = number1.Equals(number2);
f1返回true,f2返回false,因为SequenceEqual通过并行地枚举两个数据源并比较相应元素是否相同,而Equal比较的是否引用了同一个对象。