Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# LINQ聚合列表中的项,连接属性_C#_Linq - Fatal编程技术网

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

C# LINQ聚合列表中的项,连接属性,c#,linq,C#,Linq,请善待一个胆小鬼。。。 假设我有8行数据,如下所示: +-------------------+ | ID WORKTYPEDESC| +-------------------+ | 1 plumber | | 1 carpenter | | 1 electrician | | 2 juggler | | 2 mime | | 3 writer | | 3 actor | +--

请善待一个胆小鬼。。。 假设我有8行数据,如下所示:

+-------------------+
|  ID   WORKTYPEDESC|
+-------------------+
| 1     plumber     |
| 1     carpenter   |
| 1     electrician |
| 2     juggler     |
| 2     mime        |
| 3     writer      |
| 3     actor       |
+-------------------+
+-------------------------------------+
| ID    WORKTYPEDESC                  |
+-------------------------------------+
| 1     carpenter;electrician;plumber |
| 2     juggler;mime                  |
| 3     actor;writer                  |
+-------------------------------------+
作为一个8项的
IList
集合,其中
Worktype
看起来像

public class Worktype
{
  public int Id { get; set; }
  public string WorktypeDesc { get; set; }
}
我想要的是按Id聚合得到一个包含3个工作类型的列表,每个工作类型都有一个WorktypeDesc,它是一个以分号分隔的排序列表,如下所示:

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

??

仅按
Id
分组,使用
字符串。加入
在每个组内聚合

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))
    });
IEnumerable源=。。。;
var query=source.GroupBy(
x=>x.Id,
(id,g)=>新工作类型
{
Id=Id,
WorktypeDesc=string.Join(;),g.Select(x=>x.WorktypeDesc.OrderBy(x=>x))
});

Voila。我只添加了一个ToList()来获取我想要返回的类型。非常感谢。