现在,我正在尝试创建一种通用方法,以便在存储库中包含外键。

我现在得到的是:

public static class ExtensionMethods
{
    private static IQueryable<T> IncludeProperties<T>(this DbSet<T> set, params Expression<Func<T, object>>[] includeProperties)
    {
        IQueryable<T> queryable = set;
        foreach (var includeProperty in includeProperties)
        {
            queryable = queryable.Include(includeProperty);
        }

        return queryable;
    }
}


但是,编译时出现错误:


  类型“ T”必须是引用类型,才能将其用作参数
  通用类型或方法中的“ TEntity”
  'System.Data.Entity.DbSet'


这里可能是什么问题?

最佳答案

where T : class附加到方法签名的末尾:

private static IQueryable<T> IncludeProperties<T>(
    this DbSet<T> set,
    params Expression<Func<T, object>>[] includeProperties)
    where T : class // <== add this constraint.
{
    ...
}


DbSet<TEntity>具有此约束,因此,为了使T类型参数与TEntity兼容,它必须具有相同的约束。

关于c# - 创建通用扩展方法时的问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26307700/

10-11 12:24