簡體   English   中英

根據內部屬性展平集合

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM