【发布时间】: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