我需要删除数据表(ADO.net)中的所有行。我不想在这里使用Foreach。
在一个单一内容中如何删除所有行。
然后我需要将数据表更新为数据库。
注意:我已经尝试过dataset.tables [0] .rows.clear和dataset.clear但两个都无法正常工作
另外我不想使用sql delete查询。
如果您能够提供答案,请发布除此之外的其他内容。
答案 0 :(得分:6)
'foreach'也不是这个问题的简单答案 - 你遇到的问题是枚举器不再对更改的集合有效。
这里的麻烦是,对于DataRowState.Added与Unchanged或Modified中的行,Delete()行为是不同的。如果你删除()一个添加的行,它只是从集合中删除它,因为无论如何数据存储大概都不会知道它。对未更改的行或已修改的行上的Delete()只是将其标记为已删除,与其他人指示的一样。
所以我最终实现了这样的扩展方法来处理删除所有行。如果有人有更好的解决方案,那就太棒了。
public static void DeleteAllRows(this DataTable table)
{
int idx = 0;
while (idx < table.Rows.Count)
{
int curCount = table.Rows.Count;
table.Rows[idx].Delete();
if (curCount == table.Rows.Count) idx++;
}
}
答案 1 :(得分:4)
我将在此处重新发布我的评论,以防您想要关闭此问题,因为我不相信可以“批量删除”DataTable中的所有行:
删除之间有区别 来自DataTable的行并删除 他们。删除标记为已删除 这样当您对您的更改应用更改时 数据库,实际的db行是 删除。删除它们(使用Clear()) 只是将它们从内存中取出来 数据表。
您必须遍历行并逐个删除它们。它只有几行代码。
答案 2 :(得分:2)
这有效。
for (int i = dtParts.Rows.Count - 1; i >= 0; i--)
dtParts.Rows[i].Delete();
答案 3 :(得分:2)
这适用于lambda表达式:
但在这里你必须使用前面的Lambda。
幸运的是,你在这里有一行从datatable删除你的东西:)
myTable.AsEnumerable().ToList().ForEach(m => m.Delete());
答案 4 :(得分:0)
2*np.pi
为我工作
答案 5 :(得分:-2)
DataTable=Datatable.Clone;
应该这样做。这将复制表结构,但不复制数据。 (Datatable.Copy会这样做)