int[] scores = { 10, 90, 100, 30, 70, 29, 45 };
var highScoresQuery = from score in scores
where score > 80
orderby score descending
select score;
上面这段代码会延迟执行
,如果使用聚合函数,如:.Count() 就会立即执行
。为什么要这么做,好处是什么? 为什么 Count() 不采用延迟执行
呢?
linq表达式返回的是
IQueryable
并不是查询结果。延迟执行的目的有几个:highScoresQuery
是个IQueryable
,对IQueryable
执行终结方法(比如ToList
,Count
)都将执行表达式遍历、转化、并查询结果。由于Linq的灵活性,派生出了linq的很多其他用法,比如你这个就是Linq to Object。但是不同的linq实现有一些差异,延不延迟不能一概而论,还要看具体实现,但是原则上是会有个表达式遍历和转化的过程的,所以会延迟。