这两个陈述有什么区别?

时间:2011-03-18 02:19:02

标签: c# .net linq lambda

List<int> result1 = 
        (from number in list where number < 3 select number).ToList();

List<int> result2 = list.Where(n => n<3).ToList();

这两种不同的陈述之间有什么区别?

4 个答案:

答案 0 :(得分:3)

没有

第一个使用LINQ表示法,而第二个使用扩展方法表示法 - 它们都做同样的事情。

使用任何看起来更令你满意的东西。 :)

答案 1 :(得分:3)

没有区别。一种是与SQL类似的语言扩展,而不是使用委托来实现相同的结果。

答案 2 :(得分:3)

第一种表示法通常称为“查询语法”,第二种表示法是“方法语法”(或点符号或lambda语法) - 两者都编译成完全相同的代码,但正如前面提到的那样,通常是两者中的一种更简洁,对于大多数情况,这是点符号,但特别是对于连接或分组多个枚举查询语法真的很闪耀。

同时查看LINQ Query Syntax versus Method Syntax (C#)

  

介绍性LINQ中的大多数查询   文档被写为查询   表达式使用声明式   C#3.0中引入的查询语法。   但是,.NET通用语言   运行时(CLR)没有查询的概念   语法本身。因此,在   编译时,查询表达式   翻译成CLR的东西   明白:方法调用。这些   方法称为标准查询   运营商,他们的名字如   Where,Select,GroupBy,Join,Max,   平均等等。你可以打电话给他们   直接使用方法语法   而不是查询语法。

     

通常,我们建议使用查询语法   因为它通常更简单,更多   可读;但是没有语义   方法语法与方法的区别   查询语法。

答案 3 :(得分:0)

您注意到第一个是LINQ表示法,第二个表示使用lambda的扩展方法。使用秒来减少代码维护。但如果您认为内部代码或性能的相似性,只需使用秒表并运行此代码100000次并选择最快的代码。如果编译的代码相似,那么你将得到几乎相同的时间。