Entity framework 如何将此左连接Linq查询转换为Lambda表达式

Entity framework 如何将此左连接Linq查询转换为Lambda表达式,entity-framework,linq,Entity Framework,Linq,如何将这个左下角的join 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.F

如何将这个左下角的join 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      
}

如果要在不使用Linq但使用lambda表达式的情况下将所有未包含相关数据的
员工
检索到
员工详细信息
,可以编写以下代码:

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

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

如果员工在EmployeeDetails中没有相应的记录,则employee对象的嵌入式导航属性EmployeeDetails将设置为null。因此,如果您只需执行以下操作,您应该会表现出色:

db.Employee.Where(x => x.EmployeeDetails == null);
请注意,我没有在这一点上预测任何特定属性,因为上面的代码将为您提供一个在EmployeeDetails中没有详细信息的此类员工的列表。因此,这应该适用于您,但您可以选择使用Select()进一步过滤投影的列


请让我知道它是否适合您……

员工和员工之间的关系详情是什么?Employee类是否包含EmployeeDetail类型的属性?我问这个问题是因为在您的查询中,您在投影网络中没有使用
ed
varaible。她的EmpIdInfo.relationship是1-1,它们都与empid相关。然后您要编写一个查询,仅检索具有EmployeeDetails的员工,对吗?不,我想从employeedetails中不包含的employee表中检索记录,该表左键基本连接然后执行以下操作
(db.employee.Where(e=>e.employeedetails.EmpId==null)。选择new{EmpId=e.EmpId,FirstName=e.FirstName,LastName=e.LastName})。ToList()