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

Pau*_*aul 3 c# linq-to-entities entity-framework include

我不确定这是否已经回答了,我看了几个问题,但我认为它们不是我所追求的.

假设我有3个表:

Restaurant 1.....M MenuCategory 1.....M MenuItem
Run Code Online (Sandbox Code Playgroud)

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

Restaurant = context.Restaurant
   .Include(r => r.MenuCategory)
   .FirstOrDefault(r => r.RestaurantId == resaurantId);
Run Code Online (Sandbox Code Playgroud)

这在某种程度上起作用,但它只预加载菜单类别.

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

我真正希望能做的是:

Restaurant = context.Restaurant
   .Include(r => r.MenuCategory)
   .Include(r => r.MenuCategory.MenuItems)
   .FirstOrDefault(r => r.RestaurantId == resaurantId);
Run Code Online (Sandbox Code Playgroud)

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

答案1:

context.Restaurant.Include( "MenuCategory.MenuItems");

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

我把这个问题转移到了另一个问题上,因为我认为从一个完美的答案中拿出一个完全正确的答案是不公平的:

实体框架 - 包含在子查询中?- 第2部分

Jac*_*ard 7

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

    Restaurant = context.Restaurant
    .Include(r => r.MenuCategory.Select(m => m.MenuItems))
    .FirstOrDefault(r => r.RestaurantId == resaurantId);
Run Code Online (Sandbox Code Playgroud)