2011-01-18 10 views
3

LINQを使用して、オブジェクトコレクション内のオブジェクトの最大グループ数を調べるにはどうすればよいですか?一例として、LINQを使用して最大グループのオブジェクト数をカウントするにはどうすればよいですか?

:それはエラーになったよう

struct MyObject 
{ 
    public int SomeInt; 
    public int GroupInt; 
} 

List<MyObject> ObjectList = new List<MyOBject>(); 

// populate list 

int LargestGroup = ObjectList.GroupBy(x => x.GroupInt).Max().Count(); 

これは、私のために動作するようには思えない。それがある場合

ArgumentException: At least one object must implement IComparable.

は、どのように私は(このLINQクエリを修正することができます間違っている)、または正しい場合はこのエラーを防ぐために何を探す必要がありますか?

答えて

11

あなたの現在のクエリは、「最大グループ」を見つけようとしており、その後、そのグループのカウントを取得しようとしています。これは明らかに意味をなさない。グループには自然な順序はありません。は、最大のグループを見つけることに興味があることを知りません。Countあなたはおそらく欲しい

は次のとおりです。

int largestGroupCount = ObjectList.GroupBy(x => x.GroupInt) 
            .Max(g => g.Count()); 

ことMaxのオーバーロード使用する「シーケンスの各要素に対して変換関数を呼び出し、Int32の最大値を返します。」そのカウントに各グループを投影することによって配列を作成し、その配列の最大値を見つけ

int largestGroupCount = ObjectList.GroupBy(x => x.GroupInt) 
            .Select(g => g.Count()) 
            .Max(); 

一つと同様にこれを見ることができます。

+0

wow私はトリガーフィンガーで作業する必要があります;-) – BrokenGlass

+0

LINQの構文が何をしようとしているかを説明してくれてありがとう - LINQについての理解を深めてくれました。 – JYelton

+0

@JYelton:喜んで助けてください。 – Ani

関連する問題