Question

I want to delete all datatables in a dataset apart from one. I've tried this :-

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

but I get a

"Collection was modified; enumeration operation may not execute." error

.

Was it helpful?

Solution

You cannot modify a collection during enumeration. But you could use a 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);
}

OTHER TIPS

Just throwing this out there as it is untested but has no loops.

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

You'll get this anytime you try to modify a collection during a foreach. It has to do with the way the collection is iterated through.

You can do it a couple ways - one way is to determine the tables you want to remove while you're in the loop, then afterward, go back and remove them. I think the following will work:

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);
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top