假设在我的模型中,我有一个取决于A
和B
的计算属性C.D
。
是否可以制作
.Include("A")
等于
.Include("B").Include("C.D")
在我的linq到实体表达式?
答案 0 :(得分:3)
不,这是不可能的。 Include指定要包括在查询结果中的相关对象(即要加入的表)。因此A
不是一个相关的对象,而是一个简单的计算属性,那么它就不可能包含它。
受@CodeCaster的启发 - 如果您不想为此实体创建存储库,您可以编写扩展方法来执行包含
public static IQueryable<Foo> IncludeA(this DbSet<Foo> foos)
{
return foos.Include("B").Include("C.D");
}
用法:
db.Foos.IncludeA()
答案 1 :(得分:3)
默认情况下,对于Entity Framework,这是不可能的,但是如果将实际实体(例如,X
)包装在根据情况执行Include()
的某种特定于实体框架的存储库中,你最终会得到这样的东西:
public class XRepository
{
private IDbSet<X> _dbSet;
public IQueryable<X> Include()
{
return _dbSet;
}
public IQueryable<X> IncludeForA()
{
return Include().Include("B")
.Include("C.D")
}
}
然后,从您想要访问包含X
和B
的{{1}}集合的任何地方,请调用C.D
方法。