c# - EF ctx.Object.Select 和 obj.Select 之间的区别

标签 c# asp.net-mvc entity-framework

今天我遇到了一些奇怪的事情。

我使用迷你分析器来查看执行的 SQL 查询。

似乎在使用 obj.Children.Select(x => x.Prop1).SingleOrDefault() 时执行的查询获取所有列。 但是,使用 ctx.Children.Select(x => x.Prop1 && x.IDParent == idObj).SingleOrDefault() 仅获取 Prop1。

知道为什么会有差异吗?

最佳答案

因为第一个查询在这里执行:

obj.Children. ...

第二个查询在这里执行:

... .SingleOrDefault()

您将获得对包含所有列的完整实体的第一个查询,因为导航属性是由于延迟加载而加载的。加载实体后,您的 Select 将应用到内存中。当您投影到单个属性时,数据库查询此时已经完成。

第二个查询实际上在数据库中执行投影(选择单个列),并且不会加载超过此列的内容。

关于c# - EF ctx.Object.Select 和 obj.Select 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9824925/

相关文章:

asp.net-mvc - MVC 中下拉列表的验证

asp.net-mvc - 什么时候以及为什么不在C#5.0 ASP.NET MVC 4或Web API中使用基于任务的异步编程

c# - Entity Framework - 使用具有不同连接字符串的相同 DbContext

c# - 有没有办法在每次对象改变状态时执行一个 Action ?

css - Bootstrap 脚本和样式不起作用

c# - 这里的 Actor 在哪里? LINQ to Entities 仅支持转换实体数据模型基元类型

entity-framework - Entity Framework 性能问题,saveChanges非常慢

c# - 使用 C# 和 .NET 2.0 连接到本地 MySQL 数据库时出现问题

c# - DataReader (DbCommand) 如何处理 DB 通信?

c# - Entity Framework - 底层提供程序在 ConnectionString 上失败