.NET LINQ查询语法与方法链

Rad*_*u D 41 .net linq performance

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

from item in collection 
where item.id == 3
select item
Run Code Online (Sandbox Code Playgroud)

collection.Where(item => item.id ==3)
Run Code Online (Sandbox Code Playgroud)

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

Jon*_*eet 55

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

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

当然,你可以用"链式方法"语法编写各种各样的东西,这些语法不能用查询表达式语法编写,或者由于使用其他重载或者方法根本不受支持(例如Count()) - 但除非你使用那些,编译后的代码将完全相同.为任何特定方案选择最易读的替代方案.

  • @Ani:根据我的经验,关于性能的问题非常*很少关于编译速度.我希望OP明确*明确指出,如果那是他的意思.我认为,除非另有说明,否则"性能"意味着"执行时的性能"是合理的. (8认同)
  • @TravisJ:对于特定情况最简单的.我喜欢连接和分组的查询表达式 - 任何会引入透明标识符的东西 - 但对于更简单的查询,我喜欢直接的方法调用. (5认同)