C#删除除一个之外的所有数据表的最佳方法

时间:2013-01-14 22:46:17

标签: c# system.data.datatable

我想删除数据集中除一个之外的所有数据表。我试过这个: -

        foreach (DataTable table in DtSet.Tables)
        {
            if (table.TableName != "tblAccounts")
            {
                DtSet.Tables.Remove(table);
            }
        }  

但是我得到了

  

“集合已被修改;枚举操作可能无法执行。”   错误

3 个答案:

答案 0 :(得分:3)

您无法在枚举期间修改集合。但您可以使用for-loop

for (int i = DtSet.Tables.Count - 1; i >= 0; i--)
{
    var table = DtSet.Tables[i];
    if (table.TableName != "tblAccounts")
        DtSet.Tables.Remove(table);
}

答案 1 :(得分:1)

您可以在foreach期间尝试修改集合时随时获取此信息。它与迭代集合的方式有关。

您可以通过以下几种方式执行此操作 - 一种方法是确定要在循环中删除的表,然后再返回并删除它们。我认为以下内容可行:

var tablesToRemove = new List<DataTable>();
foreach (DataTable table in DtSet.Tables)
{
    if (table.TableName != "tblAccounts")
    {
        tablesToRemove.Add(table);
    }
}

foreach (DataTable table in tablesToRemove)
{
    DtSet.Tables.Remove(table);
}

答案 2 :(得分:1)

将它扔出去,因为它未经测试但没有循环。

var accounts = DtSet.Tables["tblAccounts"];
DtSet.Tables.Clear();
DtSet.Tables.Add(accounts);