基本细节
我有一个 linq 语句,它从数据库中获取一些记录并将它们放入 System.Linq.Enumerable:
var someRecords = someRepoAttachedToDatabase.Where(p=>true);
假设这抓取了吨(25k+)的记录,我需要对所有记录执行更新操作。为了加快速度,我必须决定使用分页并以 100 个块为单位执行所需的操作,而不是同时执行所有记录。
有问题的代码用于两个地方:更新数据库中大量值的服务方法,以及获取旧值和更新值以确保正确执行更新的集成测试。
问题
有问题的行是我计算子集中记录数以查看我们是否在最后一页的行;如果子集中的记录数小于分页的大小 - 那么这意味着没有更多的记录了。我想知道的是最快的方法是什么?
有问题的代码
int pageSize = 100;
bool moreData = true;
int currentPage = 1;
while (moreData)
{
var subsetOfRecords = someRecords.Skip((currentPage - 1) * pageSize).Take(pageSize); //this is also a System.Linq.Enumerable
if (subsetOfRecords.Count() < pageSize){ moreData = false;} //line in question
//do stuff to records in subset
currentPage++;
}
我考虑过的事情
- subsetOfRecords.Count() < pageSize
- subsetOfRecords.ElementAt(pageSize - 1) == null (导致越界异常 - 可以捕获异常并将 moreData 设置为 false )
- 将 subsetOfRecords 转换为数组(由于 subsetOfRecords 的声明方式,将 someRecords 转换为数组将不起作用 - 但我愿意更改它)
我敢肯定还有很多其他的想法我错过了。