我有一个相当复杂的查询,我试图通过Linq实现。我正在努力寻找办法:
如何通过Linq重现此查询?
select
company.id
IFNULL(employee.team_name, employee.name) AS team_name
FROM company
INNER JOIN branch on branch.parent_company_id = company.uuid
INNER JOIN map_employee_to_branch on map_employee_to_branch.machine_uuid = branch.uuid
INNER JOIN employee on employee.id = map_employee_to_branch.employee_id
where company.name = "Whatever" AND map_employee_to_branch.isActive = true
GROUP BY map_employee_to_branch.employee_id, company.id
ORDER BY company.id, employee.title, team_name, employee.name
答案 0 :(得分:1)
我将假设您的内部联接由您的导航属性映射处理,我正在对您的实体属性名称做出一些假设。
(from company in context.Companies
where company.name = "Whatever"
from branch in company.Branches
from m in branch.MapEmployeeToBranches
where m.IsActive
let employee = m.Employee
select new {
companyId = company.id,
employeeId = employee.id
employee.title,
teamName = employee.team_name ?? employee.name,
employee.name
} into projection
orderby projection.id, projection.title, projection.teamName, projection.name
group new { projection.companyId, projection.teamName }
by new { projection.employeeId, projection.companyId }