1

我想知道是否Deferred Execution可以用于方法语法查询语法中的查询,我很想知道是否有任何区别。谢谢

4

3 回答 3

5

实际上只有方法语法。当您使用查询语法编写查询时,编译器会将其转换为方法语法(实际上是静态方法调用)。

例子:

扩展方法调用(方法语法)

var query = sequence.Select(x => x.Property);

编译为(是的,扩展方法只是调用静态类方法的语法糖)

var query = Queryable.Select(sequence, x => x.Property);

给出相同的结果(这是相同的 Queryable/Enumerable 方法调用的语法糖)

var query = from x in sequence
            select x.Property;

因此,两种语法都会产生相同的代码。因此,您使用的语法没有区别 - 延迟执行(和其他任何东西)将以相同的方式工作。

于 2012-11-29T09:09:08.270 回答
3

查询语法只是方法语法的语法糖,所以没有区别。

于 2012-11-29T09:08:46.117 回答
3

两者的延迟执行是相同的。查询语法实际上在编译时编译为方法语法。

LINQ 查询语法与方法语法 (C#) - MSDN

介绍性 LINQ 文档中的大多数查询都是使用 C# 3.0 中引入的声明性查询语法编写为查询表达式。但是,.NET 公共语言运行时 (CLR) 本身没有查询语法的概念。因此,在编译时,查询表达式被转换为 CLR 可以理解的东西:方法调用。这些方法称为标准查询运算符,它们的名称有 Where、Select、GroupBy、Join、Max、Average 等。您可以使用方法语法而不是查询语法直接调用它们。

于 2012-11-29T09:11:31.067 回答