我的工作是使用 LINQ 聚合存在于 2 个不同数据库中的公司员工,标准是查找具有相同名称的公司,然后找到这些公司中具有相同名称的部门,然后将所有员工合并到一个新的公司对象中。
我将 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
在本示例中,我的匹配标准只是名称。
最佳答案
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()
}
}
关于c# - 使用 LINQ/Lambda 聚合 C# 中对象的重复成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15429753/