对于循环访问DataTable和设置值非常慢

时间:2015-12-13 20:06:38

标签: c# database loops datatable dataset

我有2个对象,dataset.datatablesortedDictionary。我的dataset.datatable中有多达数百万条记录,我需要检查sortedDictionarydataset.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; } } } 中,如果有,我必须更新row的第二列值(它是一个布尔值)。

dataset.datatable

我的方法需要1个多小时来更新1,000,000行 foreach (var item in UpdatePhones) { DataRow[] row = objDataSet.Tables[0].Select("Number = " + item.Key); hrow[0][1] = item.Value; } 中的3000个项目。有更快的方法吗?

  

编辑:我找到了一个非常简单的解决方案,让我觉得它有两种方式:S&lt;

func didBeginContact(contact: SKPhysicsContact)

1 个答案:

答案 0 :(得分:0)

您需要提供正确的列名才能生效。

    List<DataRow> rows = objDataSet.Tables[0].Rows.Cast<DataRow>().ToList();
    var query = from row in rows.AsParallel()
        where UpdatePhones.Contains(Convert.ToString(row.Field<string>("Phone")))
        select row;
    query.ForAll((r) => UpdateThePhone(r));


    void UpdateThePhone(DataRow row)
    {
        row.SetField("YourBooleanColumn", true);
    }

我不得不做一些猜测,比如假设当值在字典和表中时,你将第二列设置为true。当字典中没有字符串时,您提供的代码也不会将该值设置为false。