您会收到此错误,因为集合在迭代时不得更改。要从集合中删除某些项目,您通常需要在不更改的情况下迭代第二个集合。
对于您DataTable
,您需要先获取要删除的行并将它们放入新集合中。实现这一目标的一种方法是LINQ
:
让我们创建一些测试数据:
DataTable dt = new DataTable();
dt.Columns.Add("Test", typeof(bool));
DataRow dr1 = dt.NewRow();
DataRow dr2 = dt.NewRow();
DataRow dr3 = dt.NewRow();
dr1["Test"] = true;
dr2["Test"] = false;
dr3["Test"] = false;
dt.Rows.Add(dr1);
dt.Rows.Add(dr2);
dt.Rows.Add(dr3);
然后只获取列中 value 所在的行Test
并将false
它们放在 a 中List<DataRow>
:
var removeRows =
dt
.AsEnumerable()
.Where(r => (bool)r["Test"] == false)
.ToList();
现在您可以迭代新removeRows
列表并从第一个集合中删除其项目(此处DataTable.Rows
)
// Remove selected rows.
foreach (var row in removeRows)
{
dt.Rows.Remove(row);
}
在您的此查询中应该有效:
var removeRows =
dtapple
.AsEnumerable()
.Where(r => string.IsNullOrEmpty(r["PassportExpDate"].ToString()) == false)
.ToList();
如果你用string.IsNullOrEmpty()
就没有必要了Trim()
。