2012-04-03 6 views
3

私はC#でオブジェクトのリストを持っています。すべてのオブジェクトには、プロパティcode1とcode2(他のプロパティの中でも)が含まれています。リストに一致するプロパティを持つオブジェクトをグループ化する

例:

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

31の可能CODE1値があります。 可能なコード2の値は10です。私はすべてのオブジェクトが親リスト内に保存されるだろう、自分のリストに同じCODE1とCODE2値(ユニークな組み合わせ)を有するグループ化する必要がある

(個々のリストは、後に繰り返し処理することができるように。)

+0

LINQでリストをフィルタリングしようとしましたか? これは、Sqlクエリ構文でリストフィルタリングを簡単にします。 – phadaphunk

答えて

9

あなたが何かのようにしたいような音:

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); 
    } 
} 
+0

それはまさに私が必要としていたものです。ソリューションとサンプルの繰り返しをありがとう。 – Baxter

+0

新しいオブジェクト=> list.GroupedBy(x => new TempObject {x.code1、x.code2})にキャストした場合と同じになりますか。 – cpoDesign

4

可算拡張子はあなたの友達です(*お友達です:)

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

そして....リットル?私がした前に、元気なSkeetヒットポスト、SHAME!

シークエット(ハ、右)までの時間。また、共通アイテムを辞書にグループ化することもできます。

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

今マッピングはDictionary<anon{code1, code2}, List<YourObject>>です。もちろん、値のToListを省略することもできますし、ディクショナリの値の型はIGrouping(IEnumerable)になります。

また、結果が与えられたキータイプのキーを持ち、使用リストタイプのIEnumerableをされILookupあるToLookup

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

を使用することができます。これは辞書ではありませんが、同様に使用できます。

+2

'list.ToLookup(x => new {item.code1、item.code2})')を使用する方が簡単でしょう:) –

+1

私に手伝ってくれてありがとう... :) – payo

関連する問題