Skip to main content
 首页 » 编程设计

c#之基于内部属性展平集合

2024年01月22日29lovecherry

给定以下类结构:

int Id; 
string[] Codes; 

以及以下数据:

Foo { Id = 1, Codes = new[] { "01", "02" } } 
Foo { Id = 2, Codes = new[] { "02", "03" } } 
Foo { Id = 3, Codes = new[] { "04", "05" } } 

我想以以下结构结束。

Code = "01", Id = 1 
Code = "02", Id = 1 
Code = "02", Id = 2 
Code = "03", Id = 2 
Code = "04", Id = 3 
Code = "05", Id = 3 

我有以下查询,但它给了我一个集合作为 Id,而不是我所追求的平面结构。

collection.GroupBy(f => f.Codes.SelectMany(c => c), f => f.Id, 
      (code, id) => new { Code = code, Id = id }) 
   .ToArray() 

我错过了什么?

请您参考如下方法:

SelectMany可以将每个项目的多个元素作为单个列表返回

items 
    .SelectMany(foo => foo.Codes.Select(code => new { Id = foo.Id, Code = code }));