使用实体框架和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).
这就是我走了多远,我知道需要一些外部连接。帮助你的
可以通过左外连接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 property
有nullable 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 });