4

以下の foreach ブロックを単純化する方法について提案を求めたいと思いました。すべてを 1 つの linq ステートメントで作成しようとしましたが、クエリ内で「カウント」値を操作する方法がわかりませんでした。

私が達成しようとしていることの詳細: - Id が繰り返される潜在的な重複を含む巨大なリストがありますが、プロパティ「カウント」は異なる数値です - 重複を取り除きたいが、それでもそれらを失いたくありません」 Count」の値 - 同じ ID を持つ項目については、「Count」プロパティを合計します

それでも、現在のコードは見栄えがよくありません。

var grouped = bigList.GroupBy(c => c.Id).ToList();
foreach (var items in grouped)
{
    var count = 0;
    items.Each(c=> count += c.Count);
    items.First().Count = count;
}
var filtered =  grouped.Select(y => y.First());

解決策全体を期待しているわけではありません。アイデアの断片も高く評価されます:)

4

2 に答える 2

5

あなたがコレクションを変更していることを考えると、私は個人的にカウントで新しい「アイテム」を作成します:

var results = bigList.GroupBy(c => c.Id)
                     .Select(g => new Item(g.Key, g.Sum(i => i.Count)))
                     .ToList();

これにより、元のインスタンスからインスタンスの新しいコレクションへの単純なマッピングがItem、適切な値IdCount値で実行されます。

于 2013-08-20T15:51:59.113 に答える
2
var filtered = bigList.GroupBy(c=>c.Id)
                      .Select(g=> {
                                    var f = g.First();
                                    f.Count = g.Sum(c=>c.Count);
                                    return f;
                                  });
于 2013-08-20T15:51:33.090 に答える