正在编写我的第一个 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/