【问题标题】:ToPagedListAsync() - The provider for the source IQueryable doesn't implement IDbAsyncQueryProviderToPagedListAsync() - 源 IQueryable 的提供程序未实现 IDbAsyncQueryProvider
【发布时间】:2018-07-11 15:30:15
【问题描述】:

我已经尝试解决这个问题好几个小时了,但找不到解决方案。 我正在使用 Web Api MVC 项目并尝试将 IEnumerable 列表转换为异步分页列表。我能够编译,但在 ToPagedListAsync() 行上仍然出现运行时错误。

源 IQueryable 的提供程序未实现 IDbAsyncQueryProvider。只有实现 IDbAsyncQueryProvider 的提供程序才能用于实体框架异步操作。更多详情请见http://go.microsoft.com/fwlink/?LinkId=287068。”

第一层:

public async Task<IEnumerable<MatchingCriteria>> GetMatchingCriterias(int id)
{
     return await _ctx.MatchingCriterias.Include(mc => mc.RuleDefinition).Where(mc => mc.RuleDefinitionId == id).ToListAsync();
}

第二层:

internal async Task<IEnumerable<MatchingCriteria>> GetMatchingCriterias(int id)
{
    using (CrawlerDbContext db = new CrawlerDbContext())
    {
    var matchCriteriaMgr = new MatchingCriteriaManager(db);
    return await matchCriteriaMgr.GetMatchingCriterias(id);
    }
}

控制器:

public async Task<ActionResult> Index(int? id, string sortOrder, string currentFilter, string searchString, int? page){
    var matchingCriterias = await _crawlerProvider.GetMatchingCriterias(id.Value);

    //...
    IQueryable<MatchingCriteria> matchCrit = matchingCriterias.AsQueryable();
    //Error here -> return View(await matchCrit.ToPagedListAsync(pageNumber, pageSize));
}

如果我在控制器中这样做:

var matchingCriterias = _db.MatchingCriterias.Include(mc => mc.RuleDefinition);

然后:

return View(await matchingCriterias.ToPagedListAsync(pageNumber, pageSize)

效果很好!

我可以在嵌套方法上​​返回一个 DbSet,但我不能在第一层使用 ToListAsync();

有没有办法使列表 IQueryable?
还有其他想法或建议吗?

【问题讨论】:

    标签: linq asynchronous model-view-controller


    【解决方案1】:

    好吧,我自己通过创建一个 AsyncQueryable 扩展来修复它,正如提到的 here

    然后我可以像下面这样调用 pagedListAsync() 方法:

    return View(await matchingCriterias.AsAsyncQueryable().ToPagedListAsync(pageNumber, pageSize)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-04
      • 2021-12-09
      • 1970-01-01
      • 2019-02-21
      • 1970-01-01
      • 2019-02-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多