我有一个数据表,我想在这里删除一行是我的代码它给我一个例外
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(); } }
Pierre-Alain.. 18
而不是使用dt1.Rows
,使用dt1.Select()
这里的目标是不使用集合本身,而是行的数组,它是不是Rows
集合
而不是使用dt1.Rows
,使用dt1.Select()
这里的目标是不使用集合本身,而是行的数组,它是不是Rows
集合
在迭代时创建要删除的行列表DataTable.Rows
,然后单独删除它们.
非LINQ解决方案:
ListrowsToDelete = 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解决方案:
ListrowsToDelete = 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();