在c#中使用LINQ / Lambda聚合一个对象的重复成员

本文关键字:一个对象 成员 Lambda LINQ | 更新日期: 2023-09-27 18:03:57

我有一个工作,使用LINQ聚合存在于2个不同数据库中的公司员工,标准是找到具有相同名称的公司,然后找到这些公司中具有相同名称的部门,然后将所有员工合并到一个新的公司对象中。

我在一个List<Company>中有两个数据库中的所有公司,他们是否使用Aggregate函数合并同名的公司,然后找到同名的部门并合并所有员工?使用聚合函数似乎很容易合并"1级"数据,我正在努力进入3级聚合(公司>部门>员工)

List<Company> AllCompanies对象示例:

Company       Department      Employees   Source
-----------|--------------|-------------|---------
ABC Inc    |  Sales       | Sam         | DB1
           |              | Laura       |
-----------|--------------|-------------|---------
ABC Inc    |  Sales       | Joe         | DB2
-----------|--------------|-------------|---------
ABC Inc    |  Sales       | Joe         | DB1
-----------|--------------|-------------|---------
ABC Inc    |  IT          | Matt        | DB2
-----------|--------------|-------------|---------
XYZ Inc    |  Sales       | Steve       | DB1
-----------|--------------|-------------|---------
XYZ Inc    |  Sales       | Steve       | DB2 
-----------|--------------|-------------|---------
XYZ Inc    |  HR          | Mark        | DB2

我正在尝试将上面的转换为:

Company       Department      Employees
-----------|--------------|-------------
ABC Inc    |  Sales       | Sam
           |              | Laura
           |              | Joe
           |--------------|-------------
           |  IT          | Matt
-----------|--------------|-------------
XYZ Inc    |  Sales       | Steve
           |--------------|-------------
           |  HR          | Mark

在本例中,我的匹配条件仅为名称

在c#中使用LINQ / Lambda聚合一个对象的重复成员

 from c in allCompanies
 group c by c.Company into departments
 select new {
    Company = departments.Key,
    Departments = from d in departments
                  group d by d.Department into employees
                  select new {
                      Department = employees.Key,
                      Employees = employees.Select(e => e.Employees)
                                           .Distinct()
                  }
 }
相关文章: