【发布时间】:2018-01-24 17:10:51
【问题描述】:
private void DeleteMSISDN(string MSISDN)
{
DataTable dt = MSISDNTable();
dt.AsEnumerable().Where(r => r.Field<string>("MSISDN") == MSISDN).ToList().ForEach(row => row.Delete());
}
当我这样做时,我会收到一个异常 System.Data.DeletedRowInaccessibleException
【问题讨论】:
-
List
deleteRows = dt.AsEnumerable().Where(r => r.Field ("MSISDN") == MSISDN).ToList(); foreach (DataRow row in deleteRows) row.Delete(); -
@jdweng 关于为什么 OP 代码不起作用有什么想法吗?假设您的代码有效,他的版本看起来也不错(尽管它是单行的)。您可以将其发布为答案。
-
@AdamJoan 发布了一个 reproducible 示例。
MSISDNTable是否可能返回 same 数据表,导致对已删除的行进行迭代? -
@AdamJoan 还发布了 full 异常,包括其调用堆栈。现在你/我们不知道 哪里 异常是 trown。可能是对
.Delete()的调用,也可能是对.Field的调用。你可以通过Exception.ToString()获得它 -
foreach 有一个 MoveNext,当最后一个项目被删除时,您无法执行 MoveNext。