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

标签 c# sql sqlite foreach asp.net-core-3.1

这只是我需要的信息。

当我使用 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/

相关文章:

c# - MediatR 发布和 MediatR 发送

c# - 什么是最佳选择,Windows 窗体或 C# 中的 WPF 开发?

PHP MySQLi While 循环

mysql - 树输出mysql

mysql - 跨服务器,标准 SQL 生成逗号分隔列表

database - 如何将 MS Access 数据库 (.mdb) 文件转换为 Sqlite?

c# - 外部身份验证失败时返回哪个 HTTP 状态?

c# - GDI+ LockBits()/UnLockBits() 异常

sql - 如何在 PostgreSQL 中删除具有外键的多个表?

ios - sqlite:如何在 ios 中启用外键(PRAGMA foreign_keys 始终返回 0)