[英]Entity Framework - convert LINQ method chain with SelectMany to query syntax
[英]Does Deferred Execution works in the same way for method syntax and query syntax in LINQ/Entity Framework?
我想知道是否可以将Deferred Execution
用于方法语法和查询语法中的查询 ,我想知道是否存在任何区别。 谢谢
实际上,只有方法语法 。 使用查询语法编写查询时,编译器会将其转换为方法语法(实际上是静态方法调用)。
例:
扩展方法调用(方法语法)
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;
因此,两种语法都产生相同的代码。 因此,您使用哪种语法没有区别-延迟执行(以及其他任何方式)将以相同的方式工作。
查询语法只是方法语法的语法糖,因此没有区别。
两者的延期执行是相同的。 查询语法实际上是在编译时编译为方法语法的。
LINQ入门文档中的大多数查询都使用C#3.0中引入的声明性查询语法作为查询表达式编写。 但是,.NET公共语言运行库(CLR)本身没有查询语法的概念。 因此, 在编译时,查询表达式将转换为CLR可以理解的内容:方法调用 。 这些方法称为标准查询运算符,它们具有诸如Where,Select,GroupBy,Join,Max,Average等名称。 您可以使用方法语法而不是查询语法直接调用它们。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.