c#foreach循环迭代与查询执行时间的列表

c# foreach loop iterations with list from query execution time

这只是我需要的信息。

当我使用 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 项目中的时间,我想知道是否有 cleaner/faster 方法来迭代这些长数据流...

非常感谢!

不,您在执行查询并将数据加载到内存中的 IQueryable 上调用 ToList()

然后在内存中的对象上执行每次迭代。

即使没有 ToList() 查询也会执行一次,并且数据会从数据库中流出。

虽然内存效率更高,但它会在循环期间锁定底层 table,因此您需要谨慎使用该方法。