我不确定这是否正确,我相信有人会告诉我是否正确。
今晚早些时候我问了一个问题( Entity Framework - Include in sub query? ),得到了很好的回答并解决了我的问题。但是,我认为可能有更好的方法,所以我将重新提出这个问题,但略有不同。
假设我有 3 个表:
餐厅 1.....M 菜单类别 1.....M 菜单项 我有一个 L2E 查询,如下所示:
餐厅 = context.Restaurant .Include(r => r.MenuCategory) .FirstOrDefault(r => r.RestaurantId == resaurantId); 这在一定程度上有效,但它只预加载菜单类别。
我真正想做的是:
Restaurant = context.Restaurant
.Include(r => r.MenuCategory)
.Include(r => r.MenuCategory.MenuItems)
.FirstOrDefault(r => r.RestaurantId == resaurantId);
但显然这是不可用的,因为 r.MenuCategory 是一个可枚举的
...解决方法是使用标准符号:
context.Restaurant.Include("MenuCategory.MenuItems");
...但这不是强类型的。这个问题是关于寻找强类型答案
这是当前的扩展方法:
public static ObjectQuery<T> Include<T>(this ObjectQuery<T> query, Expression<Func<T, object>> path)
{
// Retrieve member path:
List<PropertyInfo> members = new List<PropertyInfo>();
EntityFrameworkHelper.CollectRelationalMembers(path, members);
// Build string path:
StringBuilder sb = new StringBuilder();
string separator = "";
foreach (MemberInfo member in members)
{
sb.Append(separator);
sb.Append(member.Name);
separator = ".";
}
// Apply Include:
return query.Include(sb.ToString());
}
如何对其进行调整以允许强类型形式:
context.Restaurant.Include("MenuCategory.MenuItems");
最佳答案
关于c# - Entity Framework - 包含在子查询中? - 第2部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1663783/