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

时间:2015-03-27 16:26:16

标签: c# linq

请善待LINQ假人...... 假设我有8行数据:

+-------------------+
|  ID   WORKTYPEDESC|
+-------------------+
| 1     plumber     |
| 1     carpenter   |
| 1     electrician |
| 2     juggler     |
| 2     mime        |
| 3     writer      |
| 3     actor       |
+-------------------+

作为IList<Worktype>看起来像

的8项Worktype集合
public class Worktype
{
  public int Id { get; set; }
  public string WorktypeDesc { get; set; }
}

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

+-------------------------------------+
| ID    WORKTYPEDESC                  |
+-------------------------------------+
| 1     carpenter;electrician;plumber |
| 2     juggler;mime                  |
| 3     actor;writer                  |
+-------------------------------------+

...

1 个答案:

答案 0 :(得分: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))
    });