2012-03-15 12 views
33

Iveは本当に面倒な問題を抱えています。私はデータセットをグループ化し、グループ内のデータには到達できません。私はIGrouping <T>インターフェイスをどのように反復処理しますか?

私はGROUPBYが

var groupedData = Data.GroupBy(x => x.Period new {x.Period}); 

これは戻します(応じて行う

Data.Period = x 
Data.Adjustment = y 

形をしているデータの負荷を持っている...キービットでないデータを取得することができますどのように私がそれをしたいか見て始めている私の階層的なデータ。 Idは内容を反復するのが好きだけど、カント...どのように私はこれを行うのですか?どのようにすればいいのですか...

投影法を使用せずにData.Adjustmentに到達する方法を扱います。私は別のグループ化をしなければならないので、私はまだプロジェクトをしたくない。 :-)

答えて

62

IGrouping<TKey, TElement>インタフェースはIEnumerable<TElement>を継承します。

foreach (var group in groupedData) 
{ 
    var groupKey = group.Key; 
    foreach (var groupedItem in group) 
     DoSomethingWith(groupKey, groupedItem); 
} 

私はしかし、あなたはあなたのクエリのためにこれを使用したほうが良いだろうことに注意してください:

これよりもむしろ
var groupedData = Data.GroupBy(x => x.Period); 

:たとえば、あなたが調整を平均化したい、場合

var groupedData = Data.GroupBy(x => new {x.Period}); 

は、あなたがこれを行うことができます:他の人のために

foreach (var group in groupedData) 
    Console.WriteLine("Period: {0}; average adjustment: {1}", group.Key, group.Average(i => i.Adjustment)); 
+0

こんにちは、私はあなたのコードの最後のforeach文でグループのクエリを実行するのですか?それをn Igroupにどのようにキャストしますか? – Exitos

+0

@Exitosこれを 'IGroup'にキャストする必要はありません。すでに* IGroupです。例については、編集済み回答を参照してください。 – phoog

+0

最初のforeach文の後にグループをどのようにクエリできますか?ありがとうbtw – Exitos

6

ことだけforeachを使用します。

foreach(var group in groupedData) 
{ 
    Console.WriteLine("Period: {0}", group.Key); 
    foreach(var item in group) 
     Console.WriteLine(" Adjustment: {0}", item.Adjustment); 
} 
+0

大変感謝! :-) – Exitos

10

IGrouping<TKey, TElement>のシーケンスの各要素は、あなたが共通TKeyを持つデータを取得するために反復処理することができIEnumerable<TElement>次のとおりです。

var groups = Data.GroupBy(x => x.Period); 
foreach(var group in groups) { 
    Console.WriteLine("Period: {0}", group.Key); 
    foreach(var item in group) { 
     Console.WriteLine("Adjustment: {0}", item.Adjustment); 
    } 
} 

上記のように、groupsIEnumerable<IGrouping<TPeriod, TAdjustment>>です。TPeriodPeriodのタイプです(あなたには教えてくれませんでした)。TAdjustmentはタイプですAdjustment。その後、groupIEnumerable<TAdjustment>を実装します(ただし、キーを取得することができるように、それはまたKeyプロパティを持つオブジェクトです。最後に、itemTAdjustmentで、groupは同じを持っていることを反復処理から来た各groupため、すべてのitemキー

+0

こんにちは、これは本当に役に立ちました。 – Exitos

6

けれども、多分明白なことを1にも使用することができます。

var groups = Data.GroupBy(x => x.Period); 

foreach(var group in groups) 
{ 
    List<Data> dataListByPeriod = group.ToList(); 
    //use this list 
} 
+0

うん、私はグループ(group.Key).ToList()をしなければならないと思った – masteroleary

関連する問題