我正在尝试创建一个“查询”构建器,但我遇到了一些问题。我希望最终用户能够选择他们希望能够选择的字段。
我的goad是做这样的事情
public IQueryable Get(Type entityType)
{
return _dbContext.Set(entityType).AsQueryable();
}
然而,当我尝试做这样的事情时_repository.Get(myType).ToList();
或者我真的没有编译,并得到这样的消息。
IQueryable'不包含'ToList'的定义,并且没有扩展方法'ToList'可以找到接受类型'IQueryable'的第一个参数(你缺少using指令或汇编引用吗?)
有人可以帮忙吗?
答案 0 :(得分:2)
您需要使用IQueryable<T>
界面而不是IQueryable
。 IQueryable<T>
继承自IEnumerable<T>
,ToList
是IEnumerable<T>
的扩展方法。 IQueryable<T>
还有其他扩展方法,例如ToListAsync
及其重载。
如果您正在尝试创建通用存储库,那么也将您的存储库类定义为通用存储库。这样做可以通过这种方式实现Get
:
public class Repository<T> : IRepository<T> where T : class,
{
public IQueryable<T> Get()
{
return _dbContext.Set<T>();
}
//...
}
答案 1 :(得分:0)
这里的答案是我无法将.ToList()
与IQueryable一起使用,但我可以使用IQueryable<T>
。所以我要做的是为名为IEntity
的实体添加一个接口,然后执行IQueryable<IEntity>().ToList();