从连接表中抓取数据,如果没有连接表的结果,仍然抓取数据
本文关键字:抓取 数据 连接 结果 如果没有 | 更新日期: 2023-09-27 18:07:22
我有两张桌子,员工和办公室我想让所有员工都回去,不管他们是否有办公室(没有办公室是一个新的要求)。但如果他们确实有办公室,我想返回所有办公室的详细信息。
现在查询只返回有办公室的员工…这是不理想的
var employeesDetails = from emp in details.FindEmployeeByLastName(lastName)
join office in details.Offices on emp.EmployeeID equals office.EmployeeID
select new {
EmpID = emp.EmpID
OfficeID = (office == null) ? -1 : office.OfficeID,
//...etc
}
我知道我必须修改这一行加入办公室细节。雇员id等于办公室。
您正在尝试完成在数据库术语中称为"左外连接"的事情。要在LINQ中完成此操作,需要使用DefaultIfEmpty
方法为缺失的右侧生成默认对象,如这篇MSDN文章
在你的例子中,它看起来像:
var employeesDetails = from emp in details.FindEmployeeByLastName(lastName)
join office in details.Offices on emp.EmployeeID equals office.EmployeeID into offices
from empoffice in offices.DefaultIfEmpty()
select new {
EmpID = emp.EmpID
OfficeID = (empoffice == null) ? -1 : empoffice .OfficeID,
//...etc
}
您可以这样做来绕过内部连接:
var employeesDetails = from emp in details.FindEmployeeByLastName(lastName)
let office = details.Offices
.Where(o => emp.EmployeeID == o.EmployeeID)
.FirstOrDefault()
select new {
EmpID = emp.EmpID
OfficeID = (office == null) ? -1 : office.OfficeID,
//...etc
}