我想知道是否Deferred Execution
可以用于方法语法和查询语法中的查询,我很想知道是否有任何区别。谢谢
问问题
294 次
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# 3.0 中引入的声明性查询语法编写为查询表达式。但是,.NET 公共语言运行时 (CLR) 本身没有查询语法的概念。因此,在编译时,查询表达式被转换为 CLR 可以理解的东西:方法调用。这些方法称为标准查询运算符,它们的名称有 Where、Select、GroupBy、Join、Max、Average 等。您可以使用方法语法而不是查询语法直接调用它们。
于 2012-11-29T09:11:31.067 回答