实体框架 - 包含在子查询中?

时间:2009-11-02 18:05:29

标签: c# entity-framework linq-to-entities include

我不确定这是否已经回答了,我看了几个问题,但我认为它们不是我想要的。

假设我有3张桌子:

Restaurant 1.....M MenuCategory 1.....M MenuItem

我有一个L2E查询,看起来像这样:

Restaurant = context.Restaurant
   .Include(r => r.MenuCategory)
   .FirstOrDefault(r => r.RestaurantId == resaurantId);

在某种程度上有效,但它只预加载菜单类别。

作为一种解决方法,我能够围绕每个类别进行迭代并在它们上调用.Load(),但这将涉及到理论上我应该需要的更多内容。

我真正希望能做的是:

Restaurant = context.Restaurant
   .Include(r => r.MenuCategory)
   .Include(r => r.MenuCategory.MenuItems)
   .FirstOrDefault(r => r.RestaurantId == resaurantId);

但显然这不可用,因为r.MenuCategory是一个可枚举的

答案1:

context.Restaurant.Include( “MenuCategory.MenuItems”);

  • 这有效,但不是强类型。我想知道是否有人能够提出强烈打字的第二个答案(我可能会将此问题转移到另一个问题,因为这已得到回答,并且回答得很好。

我已将此问题转移到另一个问题上,因为我认为从一个完美的答案中取出并完全按照应有的方式行事是不公平的:

Entity Framework - Include in sub query? - Part 2

2 个答案:

答案 0 :(得分:7)

您仍然可以使用强类型版本来执行此操作。只需使用:

    Restaurant = context.Restaurant
    .Include(r => r.MenuCategory.Select(m => m.MenuItems))
    .FirstOrDefault(r => r.RestaurantId == resaurantId);

答案 1 :(得分:2)

This link here似乎解决了您的问题?

var result = context.Restaurant.Include("MenuCategory.MenuItems");