登陆

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() 不采用延迟执行呢?

# MySQL
代言代言1834 天前563 次浏览

全部回复(1)我要回复

  • 大家讲道理

    大家讲道理2016-11-07 15:05:56

    linq相当于一个查询语句的封装,可以理解为是一个“sql语句的构造器”。定义或者修改一个linq的语句,其实就是在构造器上调整构造参数。


    ToList、Count之类的函数,可以想象它的操作对象是查询结果,而不是一个查询语句本身。因此,对linq这个构造器执行结果类函数时,构造器就会根据已有的构造参数生成最终的查询语句、执行该语句、返回查询结果,然后才会将这个查询结果交付结果类函数中使用。


    在这整个过程中,从开始定义linq,到生成执行最终查询语句并返回结果的这段时间(或者代码空间),就是你说的“延迟”。


    linq的优点在于代码及代码逻辑的简洁明快。另外还附带了Lambda表达式的优(gao)雅(bi)性(ge)、推迟sql遍历查询这种高消耗操作带来的总体性能优化等优点。(但需要注意的是,linq本身相对与原生查询代码肯定是性能下降的)


    回复
    0
  • 取消回复发送