【问题标题】:Aggregate duplicate members of an object in C# using LINQ / Lambda使用 LINQ / Lambda 在 C# 中聚合对象的重复成员
【发布时间】:2013-03-15 18:28:58
【问题描述】:

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


【解决方案1】:
 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()
                  }
 }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-29
    • 1970-01-01
    • 1970-01-01
    • 2013-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-31
    相关资源
    最近更新 更多