1

我有这门课(你可以在这里看到它的全部内容)......

internal class BaseRepository<I, C> : IRepository<I>
    where I : class, IBaseObject
    where C : BaseObject
{
    private Context _context;

    public IEnumerable<I> FindBy(Expression<Func<I, bool>> predicate)
    {
        return _context.Set<C>().ToList().Cast<I>().AsQueryable().Where(predicate);
    }

    // other methods.
}

我该如何工作,这样我就不必调用.ToList()我认为会导致 EF 返回所有内容的调用.Set<C>()

不使用它.ToList().AsQueryable()导致错误:

System.NotSupportedException:无法将类型“Sln.DAL.Sql.Entities.Project”转换为类型“Sln.DAL.Entities.IProject”。LINQ to Entities 仅支持转换 EDM 基元或枚举类型。

4

1 回答 1

0

如果我们添加一个约束

internal class BaseRepository<I, C> : IRepository<I>
    where I : class, IBaseObject
    where C : BaseObject, I

那么我们可以使用

_context.Set<C>().Where(predicate).AsEnumerable();
于 2012-04-27T19:09:28.003 回答