2014-10-28 2 views
2

В моей программе я просматриваю записи в файле excel, чтобы создать datatable. Затем мне нужно выполнить некоторое дополнительное обслуживание данных, которое я не могу сделать в первом цикле.Ошибка при прохождении через datatable

Я пытаюсь выяснить, как наилучшим образом пройти через существующие данные, чтобы удалить строки с повторяющимися значениями, сохраняя другие.

На моей примерной таблице у меня три столбца. Для каждого CorporateCode мне нужно удалить 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

ответ

0

Вы не можете удалять строки внутри цикла, где вы используете DataTable для итерации и удаление тех же строк таблицы вызывает ошибки сбора,

петли концентрируется на количестве строк DataTable во время запуска цикла , если вы удаляете строки, тогда количество строк уменьшается и неверно совпадает с подсчетом концентрации цикла и счетчиком данных.

Смежные вопросы