使用实体框架和Lambda表达式的左外连接

本文关键字:连接 表达式 Lambda 实体 框架 | 更新日期: 2023-09-27 18:14:52

Employee
id, name, datejoin, deptID

和另一个表

Marketing 
id, name, deptID

我要做的是从Marketing中的Employee表中搜索deptID,看看它是否存在,如果不存在,想要将Employee表中的name和deptID添加到Marketing表中。基本上我认为它是左外连接。

我想做的是使用lambda表达式和EF,我是这个领域的新手,所以想知道如何实现这一点。我已经创建了实体,需要找出lambda表达式

tTlEntities sde = new tTlEntities();
sde.t_Marketing.Where(x=>x.deptID == t_Employee.deptID).

这就是我走了多远,我知道需要一些外部连接。帮助你的

使用实体框架和Lambda表达式的左外连接

可以通过左外连接employee到marketing并检查employee的null marketing结果来完成,或者您可以使用not exists,在LINQ to Entities中为:

tTlEntities sde = new tTlEntities();
var employeeQuery = sde.t_Employee.Where(
                     e=> !sde.t_Marketing.Any(m => m.deptID == e.deptID));

如果您的navigation propertynullable foreign key id, EF将自动创建left outer join。如果它不可为空,则结果将是inner join。没有必要显式地编写连接。只需在导航属性上使用Include扩展方法,该属性具有nullable foreign key id .

您需要DefaultIfEmpty()。此外,该类型必须是匿名的,而不是雇员,因为它需要比雇员更多的属性。

var leftList = (from emp in Employees
                         join d in Departments
                         on emp.deptID equals d.Id into output
                         from j in output.DefaultIfEmpty()
                         select new {id = emp.Id, name = emp.name, datejoin = emp.datejoin, deptname = d.name });