5

C# にオブジェクトのリストがあります。すべてのオブジェクトには、プロパティ code1 と code2 が含まれています (他のプロパティの中でも)。

例:

List -> object = id, name, code1, code2, hours, amount.

31 の可能な code1 値があります。10 の可能な code2 値があります。

同じ code1 値と code2 値 (一意の組み合わせ) を持つすべてのオブジェクトを、親リスト内に保存される独自のリストにグループ化する必要があります (個々のリストを後で反復できるようにするためです)。

4

2 に答える 2

13

次のようなものが必要なようです。

var groups = list.GroupBy(x => new { x.code1, x.code2 });

// Example of iterating...
foreach (var group in groups)
{
    Console.WriteLine("{0} / {1}:", group.Key.code1, group.Key.code2);
    foreach (var item in group)
    {
        Console.WriteLine("  {0} ({1})", item.id, item.name);
    }
}
于 2012-04-03T17:54:19.277 に答える
4

列挙可能な拡張機能はあなたの友達です (あなたの友達ですか? :)

var groups = lists.GroupBy(item => new { item.code1, item.code2 });

そして....私がやった前の伝説的なスキートヒットポスト、残念!

ワンアップ スキート (は、右) の時間。共通項目を辞書にグループ化することもできます。

var mapping = list
  .GroupBy(item => new { item.code1, item.code2 })
  .ToDictionary(g => g.Key, g => g.ToList());

現在、マッピングはDictionary<anon{code1, code2}, List<YourObject>>. もちろん、値の ToList を除外することもできます。ディクショナリの値の型は、IEnumerable である IGrouping になります。

ToLookup を使用することもできます

var lookup = list.ToLookup(item => new { item.code1, item.code2 });

結果は、指定されたキー タイプのキーを持つ ILookup であり、使用されるリスト タイプの IEnumerable です。辞書ではありませんが、同様に使用できます。

于 2012-04-03T17:55:44.830 に答える