比较:LINQ与LAMBDA表达

Tho*_*son 13 c# linq lambda

我需要讨论LINQ和Lambda Expression的性能.

哪一个更好?

Øyv*_*hen 34

我猜你的意思是query expression在这里谈论LINQ.

它们是等价的.编译器query expression在编译之前将其更改为等效的Lambda表达式,因此生成的IL完全相同.

var result = select s from intarray
             where s < 5
             select s + 1;
Run Code Online (Sandbox Code Playgroud)

与...完全相同

var result = intarray.Where( s => s < 5).Select( s => s+1);
Run Code Online (Sandbox Code Playgroud)

请注意,如果您编写查询表达式,如下所示:

var result = select s from intarray
             where s < 5
             select s;
Run Code Online (Sandbox Code Playgroud)

它被转换为:

var result = intarray.Where( s => s < 5);
Run Code Online (Sandbox Code Playgroud)

最后调用Select被省略,因为它是多余的.

  • @Omkar - 我实际上发现链式lambdas更具可读性;) (8认同)
  • 我会想到同样的,但是,根据这个网站(http://blog.thijssen.ch/2009/02/linq-vs-lambda-vs-loop-performance-test.html),Lambda表达式执行得更快.我已将Test功能复制到应用程序中进行测试,并验证了该网站上的调查结果. (3认同)
  • 这是否意味着只学习 Lambda 表达式? (2认同)
  • “查询表达式”更具可读性,尤其是对于新人 (2认同)
  • 博客上的测试完全错误!首先,它们都是 LINQ 一个是查询表达式,另一个是 Lambda 表达式形式。其次只需将 LAMBDA 部分移动到 LINQ 上方并重新运行测试以查看结果!然后从查询中删除 int(强制转换成本)然后在两者中使用 intlist(一个不是数组,另一个是 List)结果将是相同的,因为编译器将它们转换为与上述答案相同的内容解释得很好. 我同时使用它们:Lambda 用于简单表达式,查询用于更复杂的表达式。 (2认同)
  • 主要区别在于涉及连接时 - 在查询表达式中非常简单,在使用手动方法调用时有点可怕。 (2认同)

jim*_*lan 6

快速比较反射器可能会奏效。然而,从“偏好”的角度来看,我发现 lambda 语句更容易遵循、编写和全面使用它们,无论是对象、xml 还是其他任何东西。

如果性能可以忽略不计,我会选择最适合您的那个。

我实际上开始了一个关于 linq 方法的小话题,这可能会引起人们的兴趣:

你最喜欢的 linq 方法或“技巧”是什么

干杯..