如何将此转换为左连接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
}
答案 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()进一步过滤正在投影的列。
如果它适合你,请告诉我......