【问题标题】:Error when looping through datatable循环遍历数据表时出错
【发布时间】:2014-12-24 09:49:31
【问题描述】:

在我的程序中,我循环遍历 Excel 文件中的记录以创建数据表。然后我需要做一些在第一个循环中无法做的额外数据维护。

我正在尝试找出循环遍历现有数据表以删除具有重复值的行同时保留其他行的最佳方法。

在我的示例表中,我有三列。对于每个 CompanyCode,我需要删除重复的 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

【问题讨论】:

  • 如果你修改你正在迭代的东西,则向后循环

标签: .net vb.net datatable visual-studio-2013


【解决方案1】:

您不能删除循环内使用数据表进行迭代的行,删除相同的表行会导致收集错误,

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

【讨论】:

    猜你喜欢
    • 2023-04-10
    • 2012-08-25
    • 2019-09-27
    • 2019-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多