我刚刚有一个巨大的 *blonde moment** ,但它突出了我对 Entity Framework 的烦恼。我已经禁用了延迟加载,所以我强制自己真正考虑我需要哪些数据以尽可能快地保持应用程序。
所以为了在查询中返回数据,我需要使用 Include
方法:
var query = from item in context.Customers
.Include(x=> x.Orders)
select item
这很好,直到我想选择一个更深入层次结构的项目。 IE:
Customer 1-* Orders *-1 Factory 1-1 Factory Type
据我所知,返回所有这些数据的唯一方法热切地将执行以下操作:
var query = from item in context.Customers
.Include("Orders.Factory.FactoryType")
select item
有了上述内容,我无法使用
System.Data.Entity
根据我的第一个示例使用 Lambda。有谁知道我是否在这里遗漏了一些明显的东西,或者我是否坚持通过集合为我的导航属性使用字符串声明?如果我没有任何集合,我可以写:
.Include(x=> x.Order.OrderType.Factory.FactoryType) // No bother
但是因为
Orders
集合,据我所知,没有办法进入子属性( FirstOrDefault
、 SingleOrDefault
等,不起作用)。**这只是一句台词,我碰巧很喜欢金发*
最佳答案
要包含 EntityCollections,您可以使用 选择 方法:
var query = from item in context.Customers
.Include(c => c.Orders.Select(o => o.Factory.FactoryType))
select item
请注意,这不是标准 ObjectQuery<T>.Include Method 的重载并且只是 ObjectQuery<T> 上的一个扩展方法类(class)来了 EF CTP4 .
关于linq-to-entities - Entity Framework - 通过集合导航和包含属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3780748/