对 DataRow 应用 Delete 方法后,无法直接访问它。如果您调用AcceptChanges,则此 DataRow 将从集合中删除,就像它从未存在过一样。(因此,如果您尚未更新数据库,则该行将永远不会从数据库中删除)
要反转Delete方法的效果,唯一可能的方法是使用 RejectChanges 方法,但此后,该行将不再被删除。
我不能在 LinQ 中给你一个例子,但是,通常你需要做这样的事情
for(int x = 0; x < datatable.Rows.Count; x++)
{
DataRow r = dataTable.Rows[x];
if(r.RowState == DataRowState.Deleted)
{
r.RejectChanges();
.... //do you stuff
r.Delete(); // redelete the row,
}
}
此外,如果您只对已删除的行感兴趣,您可以通过这种方式更改上面的代码,以从原始表中提取已删除行的子集。
DataTable deletedRowsTable = datatable.GetChanges(DataRowState.Deleted);
for(int x = 0; x < deletedRowsTable.Rows.Count; x++)
{
.....
// no more if needed here, because the rows are all deleted
.....
}