在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
在本例中,我的匹配条件仅为名称
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()
}
}