我使用以下代码来尝试查看将数据从一个表复制到另一个表是否遗漏了某些记录。
有可能发生这种情况的原因,但我不会在此详述。
幸运的是,这段代码一次只能运行几百条记录,所以我可以让自己将它们加载到内存中并使用LINQ
对象。
正如我所料,我的代码非常慢,我想知道是否有人可以提出任何方法来提高速度。
void Main()
{
var crossed_data = from kv in key_and_value_table
from ckv in copy_of_key_and_value_table
where kv.key != ckv.key
select new { KeyTable = kv, copyKeyTable = ckv };
List<Key_and_value> difference = new List<Key_and_value>();
foreach (var v in crossed_data)
{
if (crossed_data.Select(s => s.Kv.key).ToList().
Contains(v.ckv.Key) == false)
{
difference.Add(v.ckv);
}
}
}
public class Key_and_value
{
public string Key { get; set; }
public decimal Value { get; set; }
}
非常感谢提前
乙
答案 0 :(得分:1)
当您不需要时,您每次迭代都会执行Select
。您可以将其移动到外部范围。
var keys = crossed_data.Select(s=>s.ckv.key).ToList();
foreach(var v in crossed_data )
{
if (keys.Contains(v.kv.Key) == false)
{
difference.Add(v.Kv);
}
}
这应该可以提高速度。