我有来自不同系统的2组数据。大约20,000条记录。一组数据是List<Objects>
,另一组数据是我无法控制的系统中的RecordSet(我只能请求记录并接收记录集)。通过2大组数据的嵌套循环
我需要将2之间的数据合并,在存在于两个列表中,通过把从所述记录一些数据匹配对象结构的密钥相匹配。我试过的嵌套循环完全太慢了。
有一个快速的方式获得了比赛,并移动到下一个对象?
编辑:现有的代码
这是一个非常基本的嵌套循环
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会更快。
SOLUTION:
这里基本上是我终于实现了。
//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;
感谢大家的帮助!
您是否尝试过使用LINQ加入他们? – CaffGeek
请发布您的现有代码。 –
你提到的关键字的基础类型是什么 - “匹配存在于......中的关键字”? – sll