收集被修改;枚举操作可能无法在操作

时间:2015-06-04 14:05:49

标签: c# linq datatable

我正在尝试从循环中移除DataTable dt中的某些行,我得到上述异常:

while (dt.Rows.Count > 0 && retry < Globals.PushRetryLimit)
{
    var query = dt.AsEnumerable().Except(successBatch.AsEnumerable(), DataRowComparer.Default)
            .AsEnumerable().Except(failBatch.AsEnumerable(), DataRowComparer.Default);
    if (dt.AsEnumerable().Any())
        dt = query.CopyToDataTable();
}

successBatchfailBatch都是DataTable的{​​{1}}个克隆。

在提出此错误的其他问题中,我们正在处理dt循环。为什么会出现这种错误?

堆栈跟踪:

foreach

1 个答案:

答案 0 :(得分:0)

您正在使用foreach循环遍历集合中的元素(您的dataTable)。

Foreach查询枚举器并询问下一个元素。如果删除项目,则枚举器的状态将变为无效。枚举器必须存储一些日期,指示其当前位置。

你不应该这样做。也许使用另一个集合来跟踪更改或使用concurrent collections(阅读链接中的类)