如何删除DataTable中的多行?
如何删除符合自定义条件的 DataTable 行循环中的特定 DataRow(假设索引为偶数的行)? (不使用 LINQ)
谢谢
How can I delete specific DataRows within a loop of a DataTable rows which meet a custom condition -lets say the rows having an index of even number-? (Without using LINQ)
Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(11)
这取决于您所说的“删除”的含义。
如果您的意思是将它们标记为已删除,只需在每一行上调用
Delete()
方法即可当您在循环中访问它时。然后,您需要在数据表上调用AcceptChanges()
来完成删除 - 大概是在更新数据库之后(如果涉及的话)。如果您的意思是从 DataTable 中删除它,那么您需要分两次执行此操作:
值得指出的是,您始终可以使用第一种方法来删除行 - 因为将行标记为
Deleted
然后接受更改会自动将其从表中删除。但是,有时从Rows
集合中删除DataRow
对象会更清晰、更高效。It depends on what you mean by 'delete'.
If you mean mark them as deleted, just call the
Delete()
method on each row as you visit it in your loop. You then need to callAcceptChanges()
on the data table to finalize the delete - presumably after you update your database (if one is involved).If you mean remove it from the DataTable, then you need to do so in two passes:
It's worth pointing out that you can always use the first method to remove rows - since marking rows as
Deleted
and then accepting changes will automatically remove them from the table. But, sometimes it is more clear and efficient to simply remove theDataRow
objects from theRows
collection.尝试类似这个例子的东西
Try something like this example
如果您想要比上面建议的解决方案更短的解决方案,请尝试循环结果列表,并使用像
sub(x)
这样的 lambda 来删除每一行。If you want a shorter solution than those proposed above, try looping over the list of results, and using a lambda like
sub(x)
to remove each of those rows.另一种方法是
The other way is
要删除多行(例如 100,000 行中的 50,000 行),复制数据库比执行 datatable.Rows.Remove(row) 或 row.Delete() 快得多。例如:
To delete multiple rows (for instance 50,000 out of 100,000) it is much quicker to copy the database than to do either datatable.Rows.Remove(row) or row.Delete(). For instance:
尝试迭代 Select() 的结果。这与其他答案非常相似,但我发现它是最直接的
try iterating over the result of Select(). This is pretty similar to other answers, but I find it the most direct
我总是使用 LBushkin 的“两阶段”方法,我最终决定为它编写一个函数是值得的:
现在我可以用一行代码删除行(例如):
万一这对任何人有帮助......
(任何进一步缩写的方法都值得赞赏。)
I always used LBushkin's "two-phase" approach and I finally decided it was worth it to write a function for it:
And now I can delete rows with one line of code (for example):
In case this helps anyone...
(And any ways to further abbreviate are appreciated.)
我就是这样做的。
反向执行 for 循环很重要,否则如果除了其他位置的行之外还删除末尾的行,则会出现错误。
This is how I do it.
Its important to do the for loop in reverse otherwise you get errors if you're removing rows at the end in addition to rows in other places.
当我遇到这个问题时,我就是这样做的。
This is how I did it when I ran into this issue.
试试这个
try this