c#foreach循环迭代,从查询执行时开始列出

koaltpgm  于 2021-07-29  发布在  Java
关注(0)|答案(1)|浏览(217)

这是我需要的信息。
当我执行foreach循环时,用c#遍历一个列表,如下所示:

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项目中优化时间,我想知道是否有一种更干净/更快的方法来迭代这些长数据流。。。
谢谢!

vd2z7a6w

vd2z7a6w1#

不,你打给我 ToList()IQueryable 它执行查询并将数据加载到内存中。
然后对内存中的对象执行每个迭代。
即使没有 ToList() 查询将执行一次,数据从数据库流出来。
虽然内存效率更高,但它在循环期间对底层表保持一个锁,因此您需要对这种方法非常熟悉。

相关问题