Heim > Fragen und Antworten > Hauptteil
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() 不采用延迟执行呢?
大家讲道理2016-11-07 15:05:56
linq相当于一个查询语句的封装,可以理解为是一个“sql语句的构造器”。定义或者修改一个linq的语句,其实就是在构造器上调整构造参数。
ToList、Count之类的函数,可以想象它的操作对象是查询结果,而不是一个查询语句本身。因此,对linq这个构造器执行结果类函数时,构造器就会根据已有的构造参数生成最终的查询语句、执行该语句、返回查询结果,然后才会将这个查询结果交付结果类函数中使用。
在这整个过程中,从开始定义linq,到生成执行最终查询语句并返回结果的这段时间(或者代码空间),就是你说的“延迟”。
linq的优点在于代码及代码逻辑的简洁明快。另外还附带了Lambda表达式的优(gao)雅(bi)性(ge)、推迟sql遍历查询这种高消耗操作带来的总体性能优化等优点。(但需要注意的是,linq本身相对与原生查询代码肯定是性能下降的)