动态实体框架.ToList()返回错误

时间:2017-02-20 19:04:47

标签: c# entity-framework linq

我正在尝试创建一个“查询”构建器,但我遇到了一些问题。我希望最终用户能够选择他们希望能够选择的字段。

我的goad是做这样的事情

public IQueryable Get(Type entityType)
{
    return _dbContext.Set(entityType).AsQueryable();
}

然而,当我尝试做这样的事情时_repository.Get(myType).ToList(); 或者我真的没有编译,并得到这样的消息。

  

IQueryable'不包含'ToList'的定义,并且没有扩展方法'ToList'可以找到接受类型'IQueryable'的第一个参数(你缺少using指令或汇编引用吗?)

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:2)

您需要使用IQueryable<T>界面而不是IQueryableIQueryable<T>继承自IEnumerable<T>ToListIEnumerable<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();