从数据表中删除除最后一行以外的所有行

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);
    }
}