gpt4 book ai didi

c# - 使用 LINQ to SQL 左连接

转载 作者:太空宇宙 更新时间:2023-11-03 19:52:21 25 4
gpt4 key购买 nike

我正在使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com