我在 Entity Framework 通用存储库包装器中有一个通用 Include 方法。
public IQueryable<T> Include<T, TProperty>(IQueryable<T> queryable, Expression<Func<T, TProperty>> property)
{
return queryable.Include(property);
}
效果很好,但仅适用于一个包含。
var result = this.Context.RP.Include(query, r => r.Country);
我想要一种方法,其中我有一个表达式列表,以便可以给出多个包含。
var result = this.Context.RP.Includes(query, r => r.Country, r => r.Country.Provinces, r=> r.Country.Languages);
我创建了以下方法和类似方法,但会收到错误“无法将 lambda 表达式转换为类型,因为它不是委托(delegate)类型”或“无法从用法推断方法的类型参数。尝试指定类型”明确地论证。”
public IQueryable<T> Includes<T>(IQueryable<T> queryable, Expression<Func<T, Object>>[] predicates)
{
foreach (var predicate in predicates)
queryable.Include(predicate);
return queryable;
}
是否有正确的方法让多个 Lambda 表达式作为参数?
最佳答案
我将使用 params
关键字将参数标记为大小可变数组。
此外,我会在每次迭代时重新分配queryable
:
public IQueryable<T> Includes<T>(IQueryable<T> queryable, params Expression<Func<T, Object>>[] paths)
{
if (paths == null || paths.Length <= 0)
return queryable;
foreach (var path in paths)
{
queryable = queryable.Include(path);
}
return queryable;
}
关于c# - 通用存储库 - 表达式数组 <Func<T, TProperty>> 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30022828/