【发布时间】:2016-03-19 06:24:52
【问题描述】:
我有 2 个对象,一个 dataset.datatable 和一个 sortedDictionary。我的dataset.datatable 中有多达几百万条记录,我需要检查sortedDictionary 中的每个数字是否存在于dataset.datatable 中,如果是,我必须更新该行的第二列值(它是一个布尔值)。
foreach (var item in UpdatePhones)
{
//Run through every record
for (var i = 0; i < objDataSet.Tables[0].Rows.Count; i++)
{
//Check if exists
if (Convert.ToString(objDataSet.Tables[0].Rows[i][0]) == item.Key)
{
//If so, update second column value
objDataSet.Tables[0].Rows[i][1] = item.Value;
}
}
}
我的方法需要 1 个多小时来更新 1,000,000 行中的 3000 个项目dataset.datatable。有没有更快的方法?
编辑:我找到了一个非常简单的解决方案,但让我大吃一惊的是它可以双向工作:S
foreach (var item in UpdatePhones)
{
DataRow[] row = objDataSet.Tables[0].Select("Number = " + item.Key);
hrow[0][1] = item.Value;
}
【问题讨论】:
-
您正在对照整个表格检查 UpdatePhones 中的每个项目。您只需要对照字典检查表格,直到找到匹配项,对吧?是字典和表是1:1的对应关系,还是字典中的某些值在表中出现多次?我会使用 PLINQ 选择表中没有字典条目的每一行,然后您可以将这些行传递给更新其布尔值的函数。也可以先阅读您要检入其自己的集合的列。
-
是的,我知道我正在检查每一项......但我不知道如何对照我的字典检查表格。我可能有 100 万条连续记录和 3000 个要检查的数字。 “UpdatePhones”字典仅包含我数据库中已有的号码,这些号码也必须全部更新
标签: c# database loops datatable dataset