LINQ 为什么要延迟执行?
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() 不采用
延迟执行
呢?
Answers
linq表达式返回的是
IQueryable
并不是查询结果。延迟执行的目的有几个:
- 为后续动态表达提供可能。比如你上面的表达式,如果想再加个where条件,而且这个条件加不加事先是不知道的,怎么办呢。
- 在设计之初就是为sql服务的,即linq to sql,将linq表达式转化成sql表达式
highScoresQuery
是个
IQueryable
,对
IQueryable
执行终结方法(比如
ToList
,
Count
)都将执行表达式遍历、转化、并查询结果。由于Linq的灵活性,派生出了linq的很多其他用法,比如你这个就是Linq to Object。但是不同的linq实现有一些差异,延不延迟不能一概而论,还要看具体实现,但是原则上是会有个表达式遍历和转化的过程的,所以会延迟。