我正在进行 C# 学习过程,目前进展顺利。然而,我刚刚打了我的第一个“说什么?”时刻。
DataTable 提供对其 Rows 集合的随机行访问,不仅通过典型的集合行为,而且通过 DataTable.Select。但是,我似乎无法将此功能与 DataRow.Delete 联系起来。到目前为止,这似乎是我需要做的,以便有条件地从表中删除一行或多行。
int max = someDataTable.Rows.Count - 1;
for(int i = max; i >= 0; --i)
{
if((int)someDataTable.Rows[i].ItemArray[0] == someValue)
{
someDataTable.Rows[i].BeginEdit();
someDataTable.Rows[i].Delete();
}
else
break;
}
someDataTable.AcceptChanges();
但我对这段代码不满意。我也不相信。我肯定错过了什么。如果我需要有条件地删除一个或多个行,我真的必须按顺序点击 Rows 集合吗?
(不要介意倒置的for。我从数据表的末尾删除。所以没关系)
最佳答案
您可以查询数据集,然后循环选择行以将它们设置为删除。
var rows = dt.Select("col1 > 5");
foreach (var row in rows)
{ row.Delete(); }
dt.AcceptChanges();
...您还可以创建一些扩展方法以使其更容易...
myTable.Delete("col1 > 5");
public static DataTable Delete(this DataTable table, string filter)
{
table.Select(filter).Delete();
return table;
}
public static void Delete(this IEnumerable<DataRow> rows)
{
foreach (var row in rows)
row.Delete();
}
关于c# - DataTable,如何有条件地删除行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1591771/