c# - 有 2 组数据的自连接表的条件 LINQ 查询

标签 c# sql linq entity-framework

我试图弄清楚如何在 Employees 表上执行条件查询以返回所有分配给他们的项目,但我不太了解如何实现的警告是,对于每个员工,有 0至 1 名 EmployeeAssistant(自行加入的实体)。因此,当我选择 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?
                        })

最佳答案

您可以使用以下 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)
            };

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

关于c# - 有 2 组数据的自连接表的条件 LINQ 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27512972/

相关文章:

c# - 开启一个真表达式 c#

c# - LINQ 可以用于搜索字符串中的多个 Regex 表达式吗?

php - 生成随机数并搜索数据库

c# - 为什么 XElement 没有 GetAttributeValue 方法?

c# - 将 IQueryable 转换为 IOrderedQueryable

c# - 如何获取从事件处理程序中的代码隐藏动态生成的链接按钮 ID

c# - 如何更改默认的 OrderBy 功能,以便它首先按给定值排序?

c# - 使用自动完成和 Ajax 进行搜索

php - Laravel:whereIn 变量

C# - 如何在对象列表上执行多个包含过滤器