c# datatable去除重复行 使用dt.AsEnumerable().Distinct(DataRowComparer.Default).CopyToDataTable();方法没有起到去除重复行的效果
时间: 2024-11-09 12:18:10 浏览: 19
在C#中,`DataTable` 类型的数据集默认会存储所有行的唯一副本,包括重复数据。当你使用 `AsEnumerable().Distinct(DataRowComparer.Default).CopyToDataTable()` 这种方法试图去重时,实际上这个操作返回的是一个新的数据序列,这个序列中包含每个唯一的原始行的拷贝,并不是直接修改了原`DataTable`。
如果你想要去除`DataTable`中的重复行,你应该先将数据转换为更易于处理的形式,比如 `DataFrame` 或者 `HashSet`,然后创建一个新的`DataTable`。以下是使用`linq-to-objects`的一种做法:
```csharp
using System.Data;
using System.Linq;
// 先将DataTable转成DataRowCollection
DataRowCollection rows = dt.AsEnumerable();
// 使用HashSet去重,保证唯一性
HashSet<DataRow> uniqueRows = new HashSet<DataRow>(rows, DataRowComparer.Default);
// 再把去重后的DataRow集合转换回DataTable
DataTable uniqueDt = new DataTable();
uniqueDt.Load(uniqueRows);
```
这种方法确保了`DataTable`中不会有重复的行。注意,这不会改变原始的`DataTable`,如果需要在原表上操作,你需要复制一份表再进行去重。
阅读全文