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

使用LINQ移除DataTable所有重复项且不保留任何重复条目

实现方法

你当前的逻辑是分组后取每组第一条,本质是「重复项去重留一」。要实现「所有存在重复的记录全部删除、仅保留完全无重复的条目」,只需要在分组后增加筛选条件,只保留组内记录数为1的分组即可。

对应修改后的代码如下:

Dt1 = Dt1.AsEnumerable()
    .GroupBy(r => new { 
        filename = r.Field<string>("filename1"), 
        filesize = r.Field<string>("filesizeinkb") 
    })
    .Where(g => g.Count() == 1)
    .Select(g => g.First())
    .CopyToDataTable();
效果说明

针对你给出的测试样例:

  • 分组键为Fileone + 50的分组共包含2条记录,会被整条过滤,组内的两条记录都不会保留
  • 分组键为Filetwo + 50、Filethree + 50的分组各只有1条记录,会被正常保留
    最终输出结果仅包含Name为Three、Four的两行数据,完全匹配预期需求。

边界情况兼容

如果存在过滤后无符合条件记录的场景,直接调用CopyToDataTable()会抛出异常,可以提前做判断兼容:

var validRows = Dt1.AsEnumerable()
    .GroupBy(r => new { 
        filename = r.Field<string>("filename1"), 
        filesize = r.Field<string>("filesizeinkb") 
    })
    .Where(g => g.Count() == 1)
    .Select(g => g.First());

Dt1 = validRows.Any() ? validRows.CopyToDataTable() : Dt1.Clone();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 13:33:23