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

时间:2013-05-23 06:24:34

标签: c# entity-framework lambda linq-to-entities

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).

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

3 个答案:

答案 0 :(得分:7)

可以通过员工对营销的左外部联接和对员工的空营销结果的检查来完成,或者您可以使用不存在的LINQ to Entities:

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

答案 1 :(得分:4)

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

答案 2 :(得分:3)

您需要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 });