2

我的工作是使用 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

为了这个例子,我的匹配标准只是名称。

4

1 回答 1

4
 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()
                  }
 }
于 2013-03-15T10:28:58.530 回答