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



如何将下面的左联接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()进一步过滤正在投影的列。

请告诉我它是否对你有效。。。

相关内容

  • 没有找到相关文章

最新更新