我正在使用 Visual Studio 2015 针对 Entity Framework 6 和 SQL Server 2008 构建一个 WPF 应用程序。我有以下两个表:
Employee
-----------------------------
EmployeeId
FirstName
LastName
... other columns
EmployeeStatus
-----------------------------
EmployeeStatusId
EmployeeId (Foreign Key to Employee.EmployeeId)
ValidEmployeeStatusId
应用程序需要获取所有 EmployeeStatus.ValidEmployeeStatusId
不是 2 也不是 4(Inactive 和 Leave of Absence)的员工。我已经编写了这个 LINQ 查询,但它永远运行并且从不返回任何结果:
var query = (from e in context.Employees
from es in context.EmployeeStatus
.Where(x => e.employeeID == x.employeeID
&& (x.validEmployeeStatusID != 2
&& x.validEmployeeStatusID != 4)
.DefaultIfEmpty()
select new EmployeeViewModel
{
EmployeeId = e.employeeID,
/* set other properties*/
});
return await Task.Run(() => new
ObservableCollection<EmployeeViewModel>(query));
我做错了什么?
更新:找出是什么让我死于缓慢...每个 EmployeeViewModel
都在其 ctor 中调用数据库来填充一些 ObservableCollections。将这些属性转换为 static
并添加一个 static bool
;如果为假,填充属性并将 bool 设置为 true。因此,所有实例都对调用数据库的那些属性使用相同的数据。对于大约 4000 条记录,调用次数很多。
最佳答案
您可以通过左联接获得所需的结果。
var query = (from e in context.Employees
join es in context.EmployeeStatus
on e.employeeID equals es.employeeID into empStatuses
from emps in empStatuses.DefaultIfEmpty()
where emps.validEmployeeStatusID != 2
&& emps.validEmployeeStatusID != 4
select new EmployeeViewModel
{
EmployeeId = e.employeeID,
/* set other properties*/
});
关于c# - 使用 LINQ to SQL 左连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37439205/