数据表+使用循环删除c#中的一行

我有一个数据表,我想在这里删除一行是我的代码它给我一个例外

foreach (DataRow row in dt1.Rows) { if ((row["Name"] == "Select a Lookbook") || (row["Name"] == "Create a new Lookbook")) { row.Delete(); dt1.AcceptChanges(); } } 

我甚至尝试在if语句外面和外面的forloop仍然抛出我的错误任何想法如何实现这个任务这是我得到的例外:

 Collection was modified; enumeration operation might not execute. 

最终工作守则:

 foreach (DataRow row in dt1.Select()) { if ((row["Name"] == "Select a Lookbook") || (row["Name"] == "Create a new Lookbook")) { row.Delete(); } } 

而不是使用dt1.Rows ,使用dt1.Select()

这里的目标不是使用集合本身,而是使用不是Rows集合的Rows数组

在迭代DataTable.Rows时创建要删除的行列表,然后单独删除它们。

非LINQ解决方案:

 List rowsToDelete = new List(); foreach (DataRow row in dt1.Rows) { if ((row["Name"] == "Select a Lookbook") || (row["Name"] == "Create a new Lookbook")) { rowsToDelete.Add(row); } } foreach (DataRow row in rowsToDelete) { row.Delete(); } dt1.AcceptChanges(); 

LINQ解决方案:

 List rowsToDelete = dt1.Rows.AsEnumerable() .Where(row => (row["Name"] == "Select a Lookbook") || (row["Name"] == "Create a new Lookbook")) .Tolist(); foreach (DataRow row in rowsToDelete) { row.Delete(); } dt1.AcceptChanges(); 

这就是我遇到这个问题时的方法。

  Dim index As Integer = 0 Dim count As Integer = resultsDT.Rows.Count - 1 For i As Integer = 0 To count If resultsDT.Rows(index).Item("something") = "something" Then resultsDT.Rows(index).Delete() resultsDT.AcceptChanges() index = index - 1 End If index = index + 1 i = i + 1 Next