LINQ中查询表达式和方法表达式的区别?

21 c# linq

我不知道上述标题的用语是否合适.

就像ab:

var list = Enumerable.Range(0, 100);

var a = from l in list
        where l % 2 == 0
        select l;
var b = list.Where(l => l % 2 == 0);
Run Code Online (Sandbox Code Playgroud)

我什么时候应该使用它们?有什么不同吗?

Hab*_*bib 21

无,查询表达式编译为方法表达式.

LINQ(C#)中的查询语法和方法语法

因为查询返回IEnumerable,所以通过将方法调用链接在一起,可以在方法语法中组合它们.当您使用查询语法编写查询时,这就是编译器在幕后所做的事情

另请参阅:LINQ查询表达式(C#编程指南)

在编译时,查询表达式将根据C#规范中规定的规则转换为标准查询运算符方法调用.任何可以使用查询语法表达的查询也可以使用方法语法表示.但是,在大多数情况下,查询语法更具可读性和简洁性.有关更多信息,请参阅C#语言规范和标准查询运算符概述.

除了那个我发现在Query表达式中无法完成的地方之外,还有索引以及项目.例如,您可以在方法语法中执行以下操作:

var result = list.Select((r,i) => new { value = r, index = i});
Run Code Online (Sandbox Code Playgroud)

在查询表达式中,必须定义外部变量才能实现此目的.以下是与Jon Skeet的回答类似的讨论


Son*_*nül 6

没有

它们之间没有区别.

Query Syntax and Method Syntax in LINQ

因为查询返回IEnumerable,所以通过将方法调用链接在一起,可以在方法语法中组合它们.当您使用查询语法编写查询时,这就是编译器在幕后所做的事情.并且因为查询变量不存储查询结果,所以您可以随时修改它或将其用作新查询的基础,即使在执行之后也是如此.

也来自 LINQ Query Expressions

在编译时,查询表达式将转换为标准查询运算符方法调用.