如何在 LINQ 中急切加载整个 SQL 表?
Posted
技术标签:
【中文标题】如何在 LINQ 中急切加载整个 SQL 表?【英文标题】:How to Eager Load entire SQL table in LINQ? 【发布时间】:2009-01-16 16:27:44 【问题描述】:编写我的第一个 Linq 应用程序,我正在尝试找到执行以下操作的最佳方法:
我想一次加载整个员工表以填充缓存(用于表单自动完成)。
我能做到-
var query = from employee in db.Employees select employee;
foreach (Employee e in query)
...
但由于这是延迟加载,它会为每位员工生成一个查询。我怎样才能急切地加载整个表?
我已经调查过DataLoadOptions
,但这似乎只适用于人际关系。
【问题讨论】:
【参考方案1】:var query = db.Employees.ToList();
顺便说一句,这相当于:
var query = (from employee in db.Employees select employee).ToList();
当 lambda 语法更有意义且更短时,没有理由强迫自己使用查询运算符语法。
旁注 1:query
对象的类型将是 List<Employee>
,但是,如果我们明确指定它,则生成的 IL 和性能方面没有区别。
旁注 2:重要的是要知道问题中指定的查询不是每个员工执行一次。它只执行一次,并从数据库中一一获取(类似于运行 SELECT * FROM Employees
查询的 SqlDataReader
对象)。但是,ToList()
会加载列表中的所有行,从而在应用程序本身而不是 SQL Server 上执行针对该对象的进一步查询。
【讨论】:
当您确切知道将要发生什么时,为什么还要使用“var”?你不能改用员工名单吗? 克里斯,这是一个主观的话题,也是一种宗教问题,在其他问题中已经讨论过了。发出的 IL 绝对没有差异(因此,性能)。这主要是风格问题。 在 C# 3.0 中仍然输入变量,它只是语法糖 一切取决于使用范围和您的喜好。这是关于利弊的好读物:***.com/questions/41479/use-of-var-keyword-in-c以上是关于如何在 LINQ 中急切加载整个 SQL 表?的主要内容,如果未能解决你的问题,请参考以下文章
Linq to Entities - 使用 Include() 急切加载
ORM(Linq-SQL EF)是不是从表中加载整个数据集?