我有一个数据库,我对它进行了很多Where
调用,以在Blazor中生成一个表。这需要很长时间,因为Where
不是异步的。为了加快速度,我想通过使用System.Linq.Anc.中的:ToAsyncEnumerable().WhereAwait
来更改Where
语句
这是我的代码行:
series5 = _context.ChickenSeries.ToAsyncEnumerable().WhereAwait(async serie => await ((serie.DatumWeek5 >= firstDay && serie.DatumWeek5 <= lastDay) && serie.SlaughterHouse.SlaughterHouseId != LeegstandID));
这一行出现的错误:"bool"不包含"GetAwaiter"的定义
如何解决此问题?
代码基于的原始帖子:我如何使用";其中";使用异步谓词?最后一个答案。
Where
是用于筛选数据的运算符,它是"不执行"查询,它只是为查询定义了筛选器。因此Where
不需要asyncs
。您必须在IQueryable
上应用它来过滤数据。
尝试用以下方式重写您的查询:
var result = await _context.ChickenSeries
.Where(serie => (serie.DatumWeek5 >= firstDay && serie.DatumWeek5 <= lastDay) && serie.SlaughterHouse.SlaughterHouseId != LeegstandID)
.ToListAsync();
如果它仍然很慢,可以选择:
- 返回的记录数过高
- 数据库没有适当的索引,您必须分析SQL Server执行计划