c# - 通用存储库 - 表达式数组 <Func<T, TProperty>> 错误

标签 c# entity-framework generics

我在 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/

相关文章:

entity-framework - 如何使用 AutoMapper 将 DTO 映射到 Entity Framework 代理类?

generics - 如何在 VHDL 中将整数数组指定为泛型?

c# - Autofac 与惰性元数据

c# - 我能有一本按日期排序的字典吗

c# - c#中的Firebase(API推荐)

c# - 字段列表中的 ASP.NET EF 数据库第一个 4.1 EDMX Extent1.XXX

c# - 通过字符串生成EF orderby表达式

c# - 控制台 : Check for Keypress (Esc)

java - 引用类型依赖 - 将 Map.Entry 声明为依赖于为 TreeMap 声明的泛型类型

具有类型的 Java 泛型列表类