2014-10-28 95 views
2

在我的程序中,我循环遍历excel文件中的记录来创建数据表。然后我需要做一些额外的数据维护,这是我在第一个循环中无法做到的。通过数据表循环时出错

我想弄清楚最好的方式来循环通过现有的数据表删除重复值的行同时保留其他人。

在我的示例表上,我有三列。对于每个公司代码,我需要删除重复的BillingItems并保留最高的FeeAmount。因此,对于CompanyCode 1234,我们需要删除第一行和第二行,并保留第四行。

这些值并不总是按照相同的顺序排列。

+-------------+-----------+-------------+ 
| CompanyCode | FeeAmount | BillingItem | 
+-------------+-----------+-------------+ 
|  1234 |  10 | A   | 
|  1234 |  10 | A   | 
|  1234 |  15 | B   | 
|  1234 |  20 | A   | 
|  9876 |  10 | A   | 
|  9876 |  20 | B   | 
|  9876 |  30 | A   | 
|  9876 |  30 | A   | 
+-------------+-----------+-------------+ 

当我进入循环时,收到错误:“集合被修改;枚举操作可能不会执行。”以下是我的循环代码。

For Each loRow In dt.Rows 

    Dim liDupeCount As Integer = 0 
    liCompanyCode = loRow(0) 
    ldFeeAmount = loRow(1) 
    lsBillingItem = loRow(2) 

    Dim dupeFeeAmounts() As DataRow = dt.Select("CompanyCode = '" & liCompanyCode & "' and FeeAmount = '" & ldFeeAmount & "' and BillingItem = '" & lsBillingItem.Replace("'", "''") & "'") 

    For Each row As DataRow In dupeFeeAmounts 
     liDupeCount += 1 
    Next 

    If liDupeCount > 1 Then 
     dt.Rows(liRowCount).Delete() 
    End If  
    liRowCount += 1 

Next 
+4

向后循环如果你修改你正在迭代的东西 – Plutonix 2014-10-28 20:20:38

回答

0

不能删除循环内的行,你正在使用的数据表进行迭代和删除同一表中的行会导致错误的收集,

循环集中在数据表中,同时开始循环的行数,如果删除行,那么行数会减少,并与循环集中计数和数据表计数不匹配。