在 EF 中,当您想要在查询结果中包含导航属性时,您可以使用Include()
. 由于某些查询需要多次调用它,我尝试围绕这个概念创建一个通用包装器:
public IQueryable<T> FindAll<P>(params Expression<Func<T, P>>[] predicates) where P : class {
var entities = AllEntities();
foreach (var p in predicates) entities = entities.Include(p);
return entities;
}
并这样称呼它:
var customers = FindAll(q => q.Orders, q => q.Invoices, q => q.Contacts);
问题:
- 该函数可以编译,但是当我调用它时:“无法从用法中推断出方法的类型参数。尝试明确指定类型参数。” 我究竟做错了什么?
- 如果我让它工作,我可以
Include()
第一次调用:var customers = FindAll(q => q.Orders, q => q.Invoices);
然后在一个单独的步骤中再次调用:customers = customers.Include(p => p.Invoices);
还是会导致性能不佳,以至于我应该一次性完成包含?
编辑:
当然,JonSkeet 的回答是正确的,但是有这个解决方案似乎可以满足我的要求。不知道为什么它会起作用。是因为Aggregate()
功能吗?