.NET LINQ查询语法与方法链

以下两种说法有什么不同?

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

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

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

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

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

当然,可以用“链式方法”语法来编写各种各样的东西,不能用查询expression式语法来编写,要么是因为使用其他重载,要么是不被支持的方法(例如Count() ) – 但是除非你重新使用这些,编译后的代码将完全一样。 为任何特定场景select最可读的替代scheme。