LINQ 运算符与 LINQ 方法:一种相对于另一种的局限性、优缺点?

Den*_*ail 2 linq

LINQ 运算符和 LINQ 方法的优缺点是什么?其中一个是否具有另一个没有的限制或附加功能?

Jon*_*eet 5

LINQ 中的术语“运算符”与 C# 语言运算符(+、&& 等)的正常意义上的“运算符”不同。LINQ标准查询运算符只是 LINQ 方法,预计大多数提供程序都可以使用这些方法(特别是通过 LINQ to Objects 提供的方法)。

您是否真的询问过使用这样的查询表达式的优缺点:

var query = from item in source
            where item.SomeProperty == 5
            select item.OtherProperty;
Run Code Online (Sandbox Code Playgroud)

与普通扩展方法调用的“流畅接口”或“点表示法”相比:

var query = source.Where(item => item.SomeProperty == 5)
                  .Select(item => item.OtherProperty);
Run Code Online (Sandbox Code Playgroud)

?如果是这样,我可以更详细地写一下,但基本上是:

  • 通常不会有性能差异,因为查询表达式被编译器有效地转换为后一种语法。有时,您可以通过点表示法使用一些重载,而这些重载无法通过查询表达式使用,并且您可以通过这种方式使事情变得更高效。
  • 使用多个委托的运算符(例如Join, GroupBy)在查询表达式语法中往往更具可读性
  • 如果您的查询在查询表达式语法中使用大量透明标识符,则点表示法可能会很难看
  • 如果您的查询非常简单(只是一个Where和/或Select),那么点表示法可能会更简单
  • 如果您使用的方法不受查询表达式支持(例如Count()ToList()),那么必须将查询表达式括起来可能会很丑陋