我目前正在从包含DateTime列的数据表中选择一些特定的行。想法是在收集这些特定行后删除它们。
EnumerableRowCollection<DateTime?> dates =
dataSet.Tables[0].AsEnumerable()
.Select(r => r.Field<DateTime?>(dateColumn))
.Where((r => r < minDate || r > maxDate));
我在RowCollection中获取行,我如何从Dataset / DataTable中删除这些行?或者也许是一种更好的方法。
答案 0 :(得分:2)
要从数据表中删除行,您需要执行某些操作。
首先找到符合条件的所有行
var rowsToDelete = dataSet.Tables[0].AsEnumerable()
.Where(r => r.Field<DateTime?>(dateColumn) < minDate ||
r.Field<DateTime?>(dateColumn) > maxDate));
现在开始将每一行标记为已删除。
foreach(DataRow row in rowsToDelete)
row.Delete();
请注意,上一步仅将行标记为已删除,行仍在数据表中,但它们不再可访问(并尝试使用其RowState == DataRowState.Deleted的行导致异常)
现在您可以从DataTable调用中删除这些行
dataSet.Tables[0].AcceptChanges();
另请注意,此代码不会更改数据库表上的任何内容,只会更改内存中的 DataTable。如果要从数据库表中删除行,则需要特定于您的数据库的特定ADO.NET代码 - 例如,在Sql Server中,您需要调用SqlDataAdapter.Update方法进行批量删除或使用单个SqlCommand序列每个要删除的行都有适当的DELETE语句。