私は異なるシステムから2セットのデータを持っています。約20,000件を記録しています。データの1つのセットはList<Objects>
で、もう1つは制御できないシステムのレコードセットです(レコードのみを要求しレコードセットを受け取ることができます)。2つの大きなデータセットを介して入れ子になったループ
2つのリストの間にあるデータをマージする必要があります。両方のリストに存在するキーを照合するには、Recordsetのデータを一致するオブジェクト構造に入れます。私が試したネストループは完全に遅すぎます。
マッチを取得して次のオブジェクトに移動する方法はありますか?
EDIT:既存のコード
これは非常に基本的なネストされたループ
results = _sr.SearchLst(ut.ToString(), searchSettings);
foreach (BL.Packet ePacket in eList) {
for (Int32 j = 0; j < results.Rows.Length; j++) {
String acckey = results.Rows[0].Data.GetValue(1).ToString();
String taskname = results.Rows[0].Data.GetValue(2).ToString();
if (acckey == ePacket.RecKey.ToString()) {
ePacket.prop1 = taskname;
ePacket.prop2 = acckey;
}
}
}
である私はまた、LINQのを見ましたが、二つが一緒に行くだろうかの把握を得ることができませんでした...とにかくLinqがもっと速くなるか分からない。
解決策:
これは基本的に私がやったことです。
//move object from list to dictionary
var dict = eList.Cast<BaseObj>().ToDictionary(o => o.RecKey, o => o);
results = _sr.SearchLst(ut.ToString(), searchSettings);
if (results.Rows.Length > 0) {
//loop through all rows in recordset
for (Int32 j = 0; j < results.Rows.Length; j++) {
id = Convert.ToInt32(results.Rows[j].Data.GetValue(1));
taskname = results.Rows[j].Data.GetValue(2).ToString();
if (dict.ContainsKey(id)) {
//recordset id found in dictionary, so grab taskname
ePacket = ((BL.Packet)dict[id]);
ePacket.prop1 = taskname;
}
}
}
//move dictionary back to list
List<BaseObj> eListReturn = new List<BaseObj>(dict.Values);
return eListReturn;
お手数をおかけしております。
約sort-merge join例でより多くの情報を使用すると、LINQを使用してそれらを結合してみましたか? – CaffGeek
既存のコードを投稿してください。 –
あなたが言及したキーの根底にあるタイプ - 「存在するキーとのマッチング」とは何ですか? – sll