500,000 を超えるレコードを含む 3 つのリストが存在し、一連の操作を実行する必要があるとします (以下に示すサブセット)。
1) リスト 1 と 2 で ID の繰り返しをチェックし、重複する ID の「ValuesA」を合計して結果をリストに入れながら、個別の ID を取得します。このリストを list12 と呼びましょう。
2) リスト 3 list12 の間で一致する ID を持つすべての値を比較し、結果をコンソールに表示します。
3) 最適なパフォーマンスを保証します。
これは私がこれまでに持っているものです:
var list1 = new List<abc>()
{
new abc() { Id = 0, ValueA = 50},
new abc() { Id = 1, ValueA = 40},
new abc() { Id = 1, ValueA = 70}
};
var list2 = new List<abc>()
{
new abc() { Id = 0, ValueA = 40},
new abc() { Id = 1, ValueA = 60},
new abc() { Id = 3, ValueA = 20},
};
var list3 = new List<abc>()
{
new abc() { Id = 0, ValueA = 50},
new abc() { Id = 1, ValueA = 40},
new abc() { Id = 4, ValueA = 70},
};
1) ここ [link][1] のソリューションの助けを借りて、パート 1 を解決できました。
var list12 = list2.GroupBy(i => i.Id)
.Select(g => new
{
Id = g.Key,
NewValueA = g.Sum(j => j.ValueA),
});
2) この部分から完全な結果セットを正しく取得できないようです。一致するアカウント番号を取得できます。ハッシュセット以外のより高速な方法を誰かが知っているかもしれませんが、一致するアカウント番号とともに各リストの ValueA も必要です。
foreach (var values in list3.ToHashSet().Select(i => i.ID).Intersect(list12.ToHashSet().Select(j => j.UniqueAccount)))
{
Console.WriteLine(values) //prints matching account number
//?? how do I get ValueA with from both lists with this in the quickest way possible
}
3)オンラインで読むことからパフォーマンスを向上させるための私の唯一の試みは、上記の試みで見たようにハッシュセットを使用することですが、これを間違って行っている可能性があり、誰かがより良い解決策を持っている可能性があります