如何将此LEFT JOIN Linq查询转换为Lambda表达式

时间:2015-11-15 02:18:53

标签: entity-framework linq

如何将此转换为左连接linq查询到lambda表达式

var query = from e in db.Employee
join ed in db.EmployeeDetails on e.EmpId equals ed.EmpId into EmpIdInfo
from EmployeeDetails in EmpIdInfo.DefaultIfEmpty()
select new
{
        EmpId = e.EmpId
       ,FirstName = e.FirstName
       ,LastName = e.LastName      
}

2 个答案:

答案 0 :(得分:1)

如果您想在不使用Linq但使用lambda表达式的情况下将所有没有相关数据的Employee检索到EmployeeDetails,您可以编写以下代码:

db.Employee.Where(e => e.EmployeeDetails.Any() == false).Select(e => new { EmpId = e.EmpId ,FirstName = e.FirstName ,LastName = e.LastName }).ToList()

答案 1 :(得分:0)

如果您在数据库中的Employee和EmployeeDetails之间建立了正确的关系(FK),并且可以使用导航属性正确生成EF代码,则以下解决方案应该有效。

如果员工在EmployeeDetails中没有相应的记录,那么您的Employee对象将嵌入的导航属性EmployeeDetails设置为null。所以,如果你简单地运行以下内容你应该很好:

db.Employee.Where(x => x.EmployeeDetails == null);

请注意,此时我没有预测任何特定属性,因为上面的代码将为您提供在EmployeeDetails中没有详细信息的员工列表。因此,这应该适合您,但您可以选择使用Select()进一步过滤正在投影的列。

如果它适合你,请告诉我......