因此,我尝试使用EF Linq检索(一个或多个)某些实体的子代。 奇怪的是,这不起作用:
public static class DbSetExtension
{
public static IQueryable<T> Include<T>(this IDbSet<T> dbSet, params string[] paths) where T : class
{
foreach (var path in paths)
dbSet.Include(path: path);
return dbSet;
}
}
//Usage: dbSet<Company>().Include(paths: nameof(Company.Projects))
在这种情况下,每个孩子都是空的... 但是当我使用它时,它会起作用:
dbSet.Include("Projects");
有人知道为什么吗?我该怎么做才能解决这个问题?
解决方案
public static IQueryable<T> Include<T>(this IQueryable<T> queryable, params string[] paths) where T : class
{
foreach (var path in paths)
queryable = queryable.Include(path: path);
return queryable;
}
答案 0 :(得分:3)
.Include
实际上对dbSet
并没有任何改变。它返回一个值,而不修改其调用的对象。
foreach(var path in paths)
{
dbSet = dbSet.Include(path: path);
}
应该工作。
答案 1 :(得分:1)
这本身就是这样:
dbSet.Include(path: path);
不会更改dbSet的状态。
因此,当您返回时,包含不会被“包含”。