c# - 使用 LINQ to SQL 左连接

标签 c# .net sql-server entity-framework linq

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

相关文章:

c# - 用按钮更改 Strings.xml?

c# - C# 中的 CurveZMQ 示例以及为什么在使用 CurveZMQ 时不能将 SetOption() 用于 CURVE_SECRETKEY?

c# - 在运行时向动态对象添加成员

sql - 使用 Sql Server 集成服务连接到 Oracle 数据库

C# Windows Forms SQL 数据库表 西里尔字符

c# - .Net: FtpWebRequest "(503) Bad sequence of commands"错误

c# - Linq To SQL 问题 - 没有支持的 SQL 转换(C# 属性问题)

c# - 调用此字符串 "String"是危险的还是不好的做法?

c# - 在 csproj 文件中引用 AssemblyFileVersion

c# - SqlBulkCopy 在事务内部插入时阻止任何其他对表的写入