对包含 2 组数据的自联接表进行条件 LINQ 查询

本文关键字:条件 查询 LINQ 包含 数据 | 更新日期: 2023-09-27 18:34:21

我正在尝试弄清楚如何在员工表上执行条件查询以恢复所有分配的项目,但我不太了解如何实现的警告是,对于每个员工,有 0 到 1 个员工助理(自加入实体)。 因此,当我选择 EmployeeID=2 并且它的 EmployeeAssistantID=5 时,我想显示这两个人的所有项目,即主员工 (EmployeeID=2) 和他们的助手 (EmployeeID=5)。

这些表如下所示:

Employees
 - EmployeeID  -- (Pkey)
 - EmployeeAssistantID --  (Fkey to Employees.EmployeeID)
 - other fields

-

Projects
 - ProjectID  --  (PKey)
 - EmployeeID  -- (Fkey to Employees.EmployeeID)
 - other fields

我在 LINQ 中尝试了以下操作:

var projects = Projects.Include(proj => proj.Employee)
                        .Select(x => new
                        {
                            proj.ProjectID,
                            proj.ProjectName,
                            proj.Employee.Name
                            // ... not sure how to bring back another layer of projects for the EmployeeAssistant?
                        })

对包含 2 组数据的自联接表进行条件 LINQ 查询

可以使用以下 Linq 查询来获取所需的数据:

var query = from e in Employees
            join a in Employees on e.EmployeeAssistantID equals a.EmployeeID
            where e.EmployeeID == 2
            select new
            {
               EmployeeID = e.EmployeeID,
               AssistantID = a.EmployeeID,
               EmployeeProjects = Projects.Where(p => p.EmployeeID == e.EmployeeID),
               AssistantProjects = Projects.Where(p => p.EmployeeID == a.EmployeeID)
            };

查询返回的匿名类型包含来自两个雇员实体的所有数据,以及每个雇员的所有项目数据(有些可能相同,有些可能不同)。

我相信

你的意思是要做到以下几点:

var employeeIDs = new[] { myEmployee.EmployeeID, myEmployee.EmployeeAssistantID };
var projects = Projects.Where(p => employeeIds.Contains(p.EmployeeID));

这将抓取员工和助理都做过的所有项目,给定之前抓取的Employee记录(我称之为myEmployee)。