这只是我需要的信息。
当我使用 C# 迭代列表时执行 foreach 循环,如下所示:
foreach (var record in DbContext.UserRecords.Where(record => record.UserId == user.Id &&
record.Date.Date == startDate.AddDays(i).Date)
.ToList())
{
totHours += record.Hours;
}
每个周期到底发生了什么?查询是否会再次发生,以便我对我想要的列表中的每个项目对数据库进行 N 次查询,或者它只是第一次执行,然后循环保留数据的临时副本? 我正在尝试优化 ASP.Net 项目中的时间,我想知道是否有一种更干净/更快的方法来迭代这些长数据流...
非常感谢!
最佳答案
不,您可以在 IQueryable
上调用 ToList()
,它会执行查询并将数据加载到内存中。
然后,每次迭代都会在内存中的对象上执行。
即使没有 ToList()
,查询也会执行一次,并且数据会从数据库中流出。
虽然内存效率更高,但它在循环期间会锁定基础表,因此您需要对这种方法感到满意。
关于C# foreach 循环迭代与查询执行时的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62956546/