0

このようなクラスがある場合:

public class Foo
{
  public string Category {get;set;}
  public IEnumerable<Bar> Bars {get;set};
}

そして、私は次のような Foos のコレクションを持っています:

foo1: { Category = "Amazing", Bars = /* some Bars */ }
foo2: { Category = "Amazing", Bars = /* some Bars */ }
foo3: { Category = "Extraordinary", Bars = /* some Bars */ }

これを次のような 2 つの Foo の新しいコレクションに集約するにはどうすればよいですか。

foo4: { Category = "Amazing", Bars = /* all the Bars from foo1 and foo2 because both of them have the category "Amazing" */ }
foo5: { Category = "Extraordinary", Bars = /* some Bars */ }

これを正しい言語で説明していない場合は、お詫び申し上げます。Linq での集約は毎回私を打ち負かします。

ありがとう。

4

2 に答える 2

2

これがあなたの望むものだと思います。私はそれをテストしていませんが、正しいはずです。GroupBy は、カテゴリをキーとするグループの新しい列挙を返します。SelectMany は、複数の列挙型を 1 つの列挙型にフラット化します。

var foos = your list of foos;
var groupedFoos = foos
    .GroupBy(f => f.Category)
    .Select(g => new Foo
    { 
        Category = g.Key, 
        Bars = g.SelectMany(f => f.Bars) 
    });
于 2013-07-04T11:26:57.070 に答える