从数据表中删除除最后一行以外的所有行
Remove all rows from the datatable except last one
正如标题所说,我有一个数据表,现在我想删除数据表中除最后一行以外的所有行。我知道有很多复杂的方法可以做到这一点,但我想知道完成这项任务的简短而有效的方法。
var lastRow = myDataTable.AsEnumerable().Last();
var newDataTable = new[] {lastRow}.CopyToDataTable();
优点:
- 使用
Last()
可以使您的意图绝对明确,并且不会弄错任何索引。
- 原始数据table未修改
缺点:
- 性能不佳(
O(n)
遍历列表)。
- 创建新数据 table 而不是就地修改旧数据。
- 仅保留列,所有其他 table 属性(例如约束)不会转移到新数据 table。
参考:
DataRow dr = dt.Rows[dt.Rows.Count -1];
dt.Rows.Clear();
dt.Rows.Add(dr);
您可以使用向后的 for
循环 + RemoveAt
:
for (int i = dataTable.Rows.Count - 2; i >= 0; i--)
dataTable.Rows.RemoveAt(i);
dataTable = dataTable.AsEnumerable().Skip(dataTable.Rows.Count - 1).CopyToDataTable();
您可以尝试使用如下所示的简单 for 循环来执行此操作
foreach (DataRow dr in ds.Tables[0].Rows)
{
if(!dr.Equals(ds.Tables[0].AsEnumerable().Last()))
{
ds.Tables[0].Rows.Remove(dr);
}
}
正如标题所说,我有一个数据表,现在我想删除数据表中除最后一行以外的所有行。我知道有很多复杂的方法可以做到这一点,但我想知道完成这项任务的简短而有效的方法。
var lastRow = myDataTable.AsEnumerable().Last();
var newDataTable = new[] {lastRow}.CopyToDataTable();
优点:
- 使用
Last()
可以使您的意图绝对明确,并且不会弄错任何索引。 - 原始数据table未修改
缺点:
- 性能不佳(
O(n)
遍历列表)。 - 创建新数据 table 而不是就地修改旧数据。
- 仅保留列,所有其他 table 属性(例如约束)不会转移到新数据 table。
参考:
DataRow dr = dt.Rows[dt.Rows.Count -1];
dt.Rows.Clear();
dt.Rows.Add(dr);
您可以使用向后的 for
循环 + RemoveAt
:
for (int i = dataTable.Rows.Count - 2; i >= 0; i--)
dataTable.Rows.RemoveAt(i);
dataTable = dataTable.AsEnumerable().Skip(dataTable.Rows.Count - 1).CopyToDataTable();
您可以尝试使用如下所示的简单 for 循环来执行此操作
foreach (DataRow dr in ds.Tables[0].Rows)
{
if(!dr.Equals(ds.Tables[0].AsEnumerable().Last()))
{
ds.Tables[0].Rows.Remove(dr);
}
}