以下两个陈述之间是否有任何性能差异?
from item in collection
where item.id == 3
select item
和
collection.Where(item => item.id ==3)
一般来说,LINQ语法和方法链之间是否存在性能差异?
答案 0 :(得分:54)
不,因为它们被编译成完全相同的代码。
编译器基本上将查询表达式“预处理”为“没有查询表达式的C#3”,然后正常应用重载规则,lambda表达式转换等。这是一个非常优雅的系统,这意味着查询表达式的规则仅限于规范的一小部分。
当然,你可以用“链式方法”语法编写各种各样的东西,这些语法不能用查询表达式语法编写,要么是因为使用了其他重载,要么是根本不支持的方法(例如Count()
) - 但除非你使用它们,否则编译后的代码将完全相同。为任何特定场景选择最易读的替代方案。