gpt4 book ai didi

c# - 通用存储库 - 表达式数组 > 错误

转载 作者:太空宇宙 更新时间:2023-11-03 13:08:21 25 4
gpt4 key购买 nike

我在 Entity Framework Generic Repository 包装器中有一个通用的 Include 方法。

public IQueryable<T> Include<T, TProperty>(IQueryable<T> queryable, Expression<Func<T, TProperty>> property)
{
return queryable.Include(property);
}

效果很好,但它只适用于一个 include。

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com