2 つの文字列属性といくつかの double 属性を持つオブジェクトのリストがあります。文字列属性は同じですが、double 属性は異なるという意味で、重複した行があります。これらの重複を、double 属性の値から計算される単一の新しい行にマージしようとしています。簡単な例:
1. A, Text1, 5
2. A, Text2, 4
3. B, Text1, 7
4. A, Text1, 3
「計算された行」を単純な平均として取ると、次のようになります。
1. A, Text1, 4 (5+3)/2
2. A, Text2, 4
3. B, Text1, 7
これは私が現在行っていることです:
var groups = (from t in MyList group t by new { t.Field1, t.Field2});
foreach (var @group in groups)
{
if (@group.Count() > 1)
{
var newRow = new MyObject
{
Field1 = @group.ElementAt(0).Field1,
Field2 = @group.ElementAt(0).Field2,
Field3 = @group.Average(i => i.Field3)
};
}
}
これはうまくいきます。グループに使用できるメソッドがないため、繰り返し処理しているグループの行を置き換える方法がわかりませんremove
。私は元々、ネストされたforループ比較のクーペでこれを行おうとしましたが、リストを変更できなかったため、一致するインデックスを保存して繰り返していましたが、n * (n-1) / 2の一致があったことを意味しました...
これを行うための完全に簡単な方法がありませんか?とても難しいとは信じられませんが、まだ解決できていません。