如何将下面的左联接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表达式的情况下将所有没有相关数据的Employee
检索到EmployeeDetails
中,您可以编写以下代码:
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对象的嵌入导航属性EmployesDetails将设置为null。所以,如果你简单地运行以下程序,你应该很好:
db.Employee.Where(x => x.EmployeeDetails == null);
请注意,我在这一点上没有投影任何特定的属性,因为上面的代码将为您提供一个在EmployeeDetails中没有详细信息的员工列表。因此,这应该适用于您,但您可以选择使用Select()进一步过滤正在投影的列。
请告诉我它是否对你有效。。。