LBu*_*kin 58
这取决于你的'删除'是什么意思.
如果你的意思是将它们标记为已删除,只需Delete()在循环中访问它时调用每一行上的方法.然后,您需要调用AcceptChanges()数据表来完成删除 - 可能是在您更新数据库之后(如果涉及).
foreach( DataRow row in someTable.Rows )
{
if( /* your condition here */ )
row.Delete();
}
someTable.AcceptChanges();
Run Code Online (Sandbox Code Playgroud)
如果您的意思是从DataTable中删除它,那么您需要在两次传递中执行此操作:
List<DataRow> rowsToDelete = new List<DataRow>();
foreach( DataRow row in someTable.Rows )
{
if( /* your condition here */ )
{
rowsToDelete.Add( row );
}
}
foreach( DataRow row in rowsToDelete )
{
someTable.Rows.Remove( row );
}
Run Code Online (Sandbox Code Playgroud)
值得指出的是,您总是可以使用第一种方法来删除行 - 因为将行标记为Deleted然后接受更改将自动从表中删除它们.但是,有时只需DataRow从Rows集合中删除对象就更清晰有效.
尝试这样的例子
DataTable table = new DataTable();
table.Columns.Add("Foo",typeof(int));
for (int i = 0; i < 10; i++)
table.Rows.Add(i);
for (int i = table.Rows.Count -1; i >=0; i--)
{
// sample removes all even foos
if ((int)table.Rows[i]["Foo"] % 2 == 0)
table.Rows.RemoveAt(i);
}
Run Code Online (Sandbox Code Playgroud)
如果您想要比上面建议的解决方案更短的解决方案,请尝试遍历结果列表,并使用lambda 之类的sub(x)方法删除每一行。
dt.Select("Column1 > 0").ToList.ForEach(Sub(x) dt.Rows.Remove(x))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
71102 次 |
| 最近记录: |