删除DataTable中的特定行
|
我想从DataTable中删除一些行,但它给出了这样的错误,
集合已修改;枚举操作可能无法执行
我用来删除此代码,
foreach(DataRow dr in dtPerson.Rows){
if(dr[\"name\"].ToString()==\"Joe\")
dr.Delete();
}
那么,问题是什么以及如何解决?您建议哪种方法?
没有找到相关结果
已邀请:
13 个回复
填盖
请注意,您要反向进行迭代,以避免在删除当前索引后跳过行。
好按紊叉
VB.Net
死狸蔽垂藐
如果删除行后要使用数据表,则会出现错误。因此,您可以做的是: 用
代替
久纳禾澎
屑凉赦
希望对您有帮助
俺呵誓放胳
掀辟髓观粟
焙恍挝厂熄
社攻取墟槽
疾桓
行非常慢。 最后,我找到了更快的解决方案,在其中复制了源
并获得了预期的结果,将源
和
的结果从临时ѭ12清除为源一。 注意:而是在称为“19ѭ”的“ 18”中搜索“ 17”,您必须搜索所有不具有名称“ 17”的记录(搜索的方式略有相反) 有例子(
):
我希望如此简短的解决方案能对某人有所帮助。 有
代码(不确定是否正确,因为我使用了在线转换器:():
当然,如果没有结果(例如,如果Your
不包含
它将抛出异常),我将使用
,因此您对表不执行任何操作,它保持不变。
填盖
是只读的。然后我找到了解决方案。 这是一个wpf
应用,
靛新比比催
苛肠倒俱
可以确保所做的更改永远不会保存到SQL Server。 使这个问题更令人困惑的是,实际上在两种情况下会引发异常,因此我们必须防止这两种情况。 1.修改IEnumerable的集合 我们无法在要枚举的集合中添加或删除索引,因为这样做可能会影响枚举器的内部索引。 解决此问题的方法有两种:要么在for循环中进行自己的索引编制,要么对枚举使用单独的集合(未经修改)。 2.尝试读取已删除的条目 由于DataTables是事务性集合,因此可以将条目标记为删除,但仍会出现在枚举中。这意味着,如果您向“ 35”列询问已删除的条目,则将引发异常。 这意味着我们必须在查询列之前检查是否为
。 全部放在一起 我们可能会变得凌乱并手动完成所有这些操作,或者通过执行以下操作,让DataTable为我们完成所有工作,并使语句看起来更像是SQL调用:
通过调用DataTable的“ 38”函数,我们的查询将自动避免在DataTable中删除已删除的条目。并且由于
函数返回一个匹配数组,因此当我们调用
时,我们正在枚举的集合不会被修改。我还使用字符串插值对Select表达式进行了加分,以允许在不使代码嘈杂的情况下进行变量选择。