.net - 如何在 LINQ 中预加载整个 SQL 表?

标签 .net sql linq eager

正在编写我的第一个 Linq 应用程序,我正在尝试找到执行以下操作的最佳方法:

我想立即加载整个员工表以填充缓存(用于表单自动完成)。

我能做到-

var query = from employee in db.Employees select employee;
foreach (Employee e in query)
{
    ...
}

但由于这是延迟加载,因此它会为每个员工生成一个查询。如何立即加载整个表?

我研究了DataLoadOptions,但这似乎只适用于关系。

最佳答案

var query = db.Employees.ToList();

顺便说一下,这相当于:

var query = (from employee in db.Employees select employee).ToList();

当 lambda 语法更有意义且更短时,没有理由强制自己使用查询运算符语法。

旁注 1: query 的类型对象将是 List<Employee>但是,如果我们明确指定它,则生成的 IL 和性能没有区别。

旁注 2:重要的是要知道问题中指定的查询不是每个员工执行一次。它仅执行一次,并从数据库中逐个获取(类似于运行 SqlDataReader 查询的 SELECT * FROM Employees 对象)。然而,ToList()加载列表中的所有行,从而使对该对象的进一步查询在应用程序本身而不是 SQL Server 上执行。

关于.net - 如何在 LINQ 中预加载整个 SQL 表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/451006/

相关文章:

c# - 在什么情况下 `RealProxy.GetTransparentProxy()` 会返回 `null` ?

php - MYSQLI 查询总和列重复行上的值

sql - 使用纯 SQLite 将字符串拆分为行

sql - 如何在 Spark SQL 中为posexplode 列指定别名?

c# - C# 中的接口(interface)实现语法选项

.net - 如何将 OData 查询字符串转换为 .NET 表达式树

.net - SQLite 程序集未复制到输出文件夹以进行单元测试

c# - 如何通过自定义加入数据集来获取此 Linq 查询?

c# - 在 linq foreach 中调用方法 - 有多少开销?

c# - 在数据表中拆分并创建新行的场景?