.NET LINQ查询语法与方法链

时间:2010-09-23 08:31:38

标签: .net linq performance

以下两个陈述之间是否有任何性能差异?

from item in collection 
where item.id == 3
select item

collection.Where(item => item.id ==3)

一般来说,LINQ语法和方法链之间是否存在性能差异?

1 个答案:

答案 0 :(得分:54)

不,因为它们被编译成完全相同的代码。

编译器基本上将查询表达式“预处理”为“没有查询表达式的C#3”,然后正常应用重载规则,lambda表达式转换等。这是一个非常优雅的系统,这意味着查询表达式的规则仅限于规范的一小部分。

当然,你可以用“链式方法”语法编写各种各样的东西,这些语法不能用查询表达式语法编写,要么是因为使用了其他重载,要么是根本不支持的方法(例如Count() ) - 但除非你使用它们,否则编译后的代码将完全相同。为任何特定场景选择最易读的替代方案。