【问题标题】:Entity Framework - Include in sub query?实体框架 - 包含在子查询中?
【发布时间】:2010-12-12 09:01:24
【问题描述】:

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

假设我有 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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 干得好 - 这为我解决了问题....但是,我真的不喜欢这种无类型的方法,这就是我使用扩展方法的原因。我会将扩展方法放在问题中 - 只是想知道是否有人能够提出一个类型化的解决方案
    • 如果你有兴趣,我已经在这里设置了这个问题的第 2 部分,stackoverflow.com/questions/1663783/…
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2010-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多