8

我刚刚度过了一个巨大的*金发时刻**,但它突出了我对 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等,不工作)。


**这只是一个转折点,我碰巧很喜欢金发女郎*

4

1 回答 1

14

要包含 EntityCollections,请使用Select方法:

var query = from item in context.Customers
           .Include(c => c.Orders.Select(o => o.Factory.FactoryType))
           select item

请注意,这不是标准ObjectQuery<T>.Include 方法的重载,而仅仅是EF CTP4 附带的ObjectQuery<T>类的扩展方法。

于 2010-09-24T02:05:13.750 回答