Linq查询 - 一次使用select,group by,join,function和order?

时间:2017-10-27 22:21:06

标签: c# .net asp.net-mvc linq

我有一个相当复杂的查询,我试图通过Linq实现。我正在努力寻找办法:

  • 按选择返回顺序排列(选择的IFNULL结果在组中使用)
  • 在sql中获取所有不同的结果

如何通过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

1 个答案:

答案 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 }