C# 无法从datatable中删除多行

C# 无法从datatable中删除多行,c#,asp.net,C#,Asp.net,我有以下代码数据是可数据的 DataRow[] rows; rows = data.Select("meta_key = '_edit_lock'"); rows = data.Select("meta_key = 'resume_path'"); foreach (DataRow r in rows) r.Delete(); data.AcceptChanges(); 我只能从datatable中删除resume\u path行,不能删除“edit\u lock”。选择筛选器应包括

我有以下代码<代码>数据是可数据的

 DataRow[] rows;
  rows = data.Select("meta_key = '_edit_lock'");
 rows = data.Select("meta_key = 'resume_path'");
 foreach (DataRow r in rows)
r.Delete();
data.AcceptChanges();

我只能从datatable中删除resume\u path行,不能删除“edit\u lock”。

选择筛选器应包括这两个条件,如下面的代码所示

DataRow[] rows;
rows = data.Select("meta_key = '_edit_lock' OR meta_key = 'resume_path'");
foreach (DataRow r in rows) {
    r.Delete();
}
data.AcceptChanges();
选择过滤器也可以表示为

"meta_key IN ('_edit_lock', 'resume_path')"

这是因为您已经覆盖了rows变量。当时我写的“一个答案”和“这句话”都是正确的,但我认为这句话揭示了更一般的学习原则。您不应该修改正在迭代的集合。它通常会抛出异常,但即使不抛出异常,也几乎肯定会导致bug,除非您非常小心。而是创建一个副本,或者执行两次传递,一次查找要删除的行/项的索引,第二次在这些索引上循环,从源列表中按相反顺序删除这些索引。