C# 这两个EF查询之间有什么区别?哪一个是最好的,为什么?
EF中这两个查询的区别是什么,哪一个最好,为什么C# 这两个EF查询之间有什么区别?哪一个是最好的,为什么?,c#,linq,entity-framework,linq-to-entities,entity-framework-5,C#,Linq,Entity Framework,Linq To Entities,Entity Framework 5,EF中这两个查询的区别是什么,哪一个最好,为什么 using (var context = new BloggingContext()) { var blogs = (from b in context.Blogs select b).ToList(); var blogs = context.Blogs.ToList(); } 第一个查询不执行任何操作,您只是在构造查询 第二个查询从数据库中获取所有博客记录并将它们加载到内存中 哪个最好取决于你的需要 编辑:如果您询
using (var context = new BloggingContext())
{
var blogs = (from b in context.Blogs select b).ToList();
var blogs = context.Blogs.ToList();
}
第一个查询不执行任何操作,您只是在构造查询 第二个查询从数据库中获取所有博客记录并将它们加载到内存中 哪个最好取决于你的需要 编辑:如果您询问语法,则没有区别。编译器会将查询语法编译为扩展方法调用 除此之外,这:
from b in context.Blogs select b
这有点毫无意义。它等同于context.Blogs.Selectx=>x。所以在本例中,我将使用context.Blogs.ToList 我相信你的问题是关于方法语法和查询语法的。第一个查询基于查询语法,第二个查询基于方法语法 见: 介绍性语言中的大多数查询都集成了查询LINQ 文档是使用LINQ声明性查询语法编写的。 但是,必须将查询语法转换为 编译代码时.NET公共语言运行库CLR 编辑: 对于编辑的代码段,执行时两个查询之间没有区别。第一个查询基于查询语法,该语法将编译为第二个查询的方法语法。在这两者之间做出选择是一个选择的问题。我个人认为方法语法更具可读性 旧答案: 但是,您的两个查询之间有一个主要区别。您的第一个查询只是一个查询构造,尚未执行,考虑到您已经标记了实体框架,您的第一个查询将不会从内存中的数据库中带来任何记录。要迭代结果集,需要ToList、ToArray等 第二个查询实际上是从表中获取所有记录并加载到内存中的列表对象中 另见: 在返回值序列的查询中,查询变量 它本身从不保存查询结果,只存储查询 命令。查询的执行延迟到查询变量 在foreach或For Each循环中迭代。这被称为 延期执行;也就是说,查询执行发生在一段时间之后 构造查询。这意味着您可以按如下方式执行查询: 你想怎么做就怎么做。例如,当您 正在由其他应用程序更新的数据库。在你的 应用程序,您可以创建查询以检索最新信息 并重复执行查询,返回更新的信息 每一次
完全同意@Habib正确回答礼貌@Habib 还记得我从@Habib抄袭的吗
我相信你的问题是关于方法语法和查询语法的。第一个查询基于查询语法,第二个查询基于方法语法 见: 介绍性语言集成查询LINQ文档中的大多数查询都是使用LINQ声明性查询语法编写的。但是,在编译代码时,必须将查询语法转换为.NET公共语言运行库CLR的方法调用
编辑:对于已编辑的代码段,执行时两个查询之间没有差异。第一个查询基于查询语法,该语法将编译为第二个查询的方法语法。在这两者之间做出选择是一个选择的问题。我个人认为方法语法更具可读性 我现在更新问题,两个问题将返回相同的结果results@WaqasIdrees,在这种情况下,请专注于我答案的第一部分。它是方法语法与查询语法之比。更新后的查询之间没有区别。查询语法查询第一个将编译成方法语法。当有疑问时,比较Linq和EF查询的另一种方法是对查询执行.ToString。这将为您提供查询转换为的SQL。在这种情况下,它应该是相同的。为什么你否决了我的问题?