List<int> result1 =
(from number in list where number < 3 select number).ToList();
List<int> result2 = list.Where(n => n<3).ToList();
这两种不同的陈述之间有什么区别?
答案 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次并选择最快的代码。如果编译的代码相似,那么你将得到几乎相同的时间。