请善待LINQ假人...... 假设我有8行数据:
+-------------------+
| ID WORKTYPEDESC|
+-------------------+
| 1 plumber |
| 1 carpenter |
| 1 electrician |
| 2 juggler |
| 2 mime |
| 3 writer |
| 3 actor |
+-------------------+
作为IList<Worktype>
看起来像
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 |
+-------------------------------------+
...
答案 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))
});