LINQ聚合列表中的项目,连接属性

MC5*_*MC5 1 c# linq

请善待LINQ假...说我有8行数据,如下所示:

+-------------------+
|  ID   WORKTYPEDESC|
+-------------------+
| 1     plumber     |
| 1     carpenter   |
| 1     electrician |
| 2     juggler     |
| 2     mime        |
| 3     writer      |
| 3     actor       |
+-------------------+
Run Code Online (Sandbox Code Playgroud)

作为一个8项目的IList<Worktype>集合,Worktype看起来像

public class Worktype
{
  public int Id { get; set; }
  public string WorktypeDesc { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我想要的是通过Id聚合得到一个包含3个Worktypes的列表,每个WorktypeDesc都是一个排序的,以分号分隔的列表,如下所示:

+-------------------------------------+
| ID    WORKTYPEDESC                  |
+-------------------------------------+
| 1     carpenter;electrician;plumber |
| 2     juggler;mime                  |
| 3     actor;writer                  |
+-------------------------------------+
Run Code Online (Sandbox Code Playgroud)

??

Tim*_*lds 6

只需分组Id,用于string.Join在每个组内聚合.

IEnumerable<Worktype> source = ...;
var query = source.GroupBy(
    x => x.Id,
    (id, g) => new Worktype
    {
        Id = id,
        WorktypeDesc = string.Join(";", g.Select(x => x.WorktypeDesc).OrderBy(x => x))
    });
Run Code Online (Sandbox Code Playgroud)