我正在尝试创建一个查询构建器,我遇到了一个问题。我希望最终用户能够选择他们希望选择的字段。
我的goad是做这样的事情
public IQueryable Get(Type entityType)
{
return _dbContext.Set(entityType).AsQueryable();
}
但是,当我尝试做类似_repository.Get(myType).ToList();
的事情时或者实际上我不编译的任何东西,并收到这样的消息。
iqueryable'不包含" tolist"的定义,也没有扩展方法" tolist"接受类型的" iQueryable"的第一个参数(您是否缺少使用指令或汇编参考?)
有人可以帮忙吗?
您需要使用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>();
}
//...
}
这里的答案是,我无法使用.ToList()
使用Iqueryable,但我可以使用IQueryable<T>
。因此,我要做的就是将接口添加到称为IEntity
的实体,然后进行IQueryable<IEntity>().ToList();