c# - 使用 LINQ/Lambda 聚合 C# 中对象的重复成员

标签 c# linq lambda aggregate-functions

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

相关文章:

c# - 使用 MvvmCross 将图标添加到 TabLayout

c# - 使用套接字通过代理将请求从客户端中继到服务器 C#

c# - 使用 FTP 协议(protocol)上传后文件损坏

c# - linq 异常 : This function can only be invoked from LINQ to Entities

c# - 测试 lambda 表达式相等性的最有效方法

尝试在同一连接内运行多个命令时出现 C# Winforms Npgsql 3.0.5 "An operation already in progress"错误

c# - 在 C# 中使用 LINQ 过滤可变数量的参数

c# - Linq to objects - 从其他集合中搜索具有值的集合

c++ - 可以在 C++20 的 `decltype` 或 `sizeof` 表达式中定义类型吗?

java - 使用 Java 8 流如何将 Map<String, List<Something>> 转换为 Map<String, Integer>?