[英]Flatten a collection based on an internal property
給定以下類結構:
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 }));
Diego Torres的答案是正確的。 我只會補充一點,該查詢以理解形式特別簡潔並且可讀:
var q = from foo in foos
from code in foo.Codes
select new { Code = code, foo.Id };
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.