You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何删除DataTable中存在任意列值重复的行?

删除DataTable中任意列含重复值的所有行

要实现删除所有存在任意列值重复的行(即只要某列出现重复值,所有包含该值的行都移除),可以按以下思路实现:

核心逻辑

  1. 先定位每一列中出现次数≥2的重复值集合
  2. 遍历DataTable所有行,只要该行任意一列的值属于对应列的重复值集合,就标记为待删除
  3. 统一删除标记行(避免遍历中修改表结构导致的索引异常)

具体代码实现

using System.Data;
using System.Linq;
using System.Collections.Generic;

public static void RemoveRowsWithAnyDuplicates(DataTable targetTable)
{
    // 1. 收集每一列的重复值集合
    var columnDuplicateValues = new Dictionary<string, HashSet<object>>();
    foreach (DataColumn column in targetTable.Columns)
    {
        // 统计当前列各值出现次数,筛选出重复值
        var duplicateValues = targetTable.AsEnumerable()
                                         .GroupBy(row => row[column])
                                         .Where(group => group.Count() > 1)
                                         .Select(group => group.Key);
        
        columnDuplicateValues[column.ColumnName] = new HashSet<object>(duplicateValues);
    }

    // 2. 筛选出所有需要删除的行
    var rowsToDelete = targetTable.AsEnumerable()
                                  .Where(row => 
                                      targetTable.Columns.Cast<DataColumn>()
                                                        .Any(col => columnDuplicateValues[col.ColumnName].Contains(row[col]))
                                  )
                                  .ToList();

    // 3. 执行删除操作
    foreach (var row in rowsToDelete)
    {
        row.Delete();
    }

    // 提交表修改
    targetTable.AcceptChanges();
}

补充优化

如果需要同时移除空值或DBNull的行,可以在筛选待删除行时追加判断条件:

.Where(row => 
    targetTable.Columns.Cast<DataColumn>().Any(col => columnDuplicateValues[col.ColumnName].Contains(row[col]))
    || targetTable.Columns.Cast<DataColumn>().Any(col => row.IsNull(col) || string.IsNullOrEmpty(row[col]?.ToString().Trim()))
)

调用方式:直接传入你的DataTable对象即可

RemoveRowsWithAnyDuplicates(tblcsv);

内容的提问来源于stack exchange,提问作者Valeso

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 10:22:49