2

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

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

我可以 -

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

但由于这是延迟加载,它会为每个员工生成一个查询。我怎样才能急切地加载整个表?

我调查过DataLoadOptions,但这似乎只适用于人际关系。

4

1 回答 1

3
var query = db.Employees.ToList();

顺便说一句,这相当于:

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

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

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

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

于 2009-01-16T16:30:02.530 回答