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

DataTable单列值比对问题:查找重复name行未生效

问题分析与解决方案

嘿,我一眼就瞅出你代码里的关键问题啦!你写的筛选条件dataRow["name"] == dataRow["name"]完全起不到筛选重复行的作用——每一行的name和自己比肯定都是相等的,所以所有行都被一股脑捞进新表了,这就是为啥返回的表和原表一模一样。

要找出name列重复的行,得换个思路:先确定哪些name值是重复出现的,再把所有包含这些name的行筛选出来。具体可以这么做:

  • 第一步:对原表的行按name列分组,统计每个name出现的次数,把出现次数大于1的name值收集起来。
  • 第二步:从原表中筛选出name属于上述重复集合的行,添加到新表中。

修改后的代码如下:

private DataTable MatcherTable(DataTable table)
{
    DataTable match = table.Clone();
    
    // 先找出所有重复出现的name值
    var duplicateNames = table.Rows.Cast<DataRow>()
        .GroupBy(row => row["name"])
        .Where(group => group.Count() > 1)
        .Select(group => group.Key)
        .ToList();
    
    // 筛选出所有包含重复name的行
    var duplicateRows = table.Rows.Cast<DataRow>()
        .Where(row => duplicateNames.Contains(row["name"]))
        .ToList();
    
    foreach (var row in duplicateRows)
    {
        match.Rows.Add(row.ItemArray);
    }
    
    return match;
}

另外补充个小细节:如果你的name列可能存在DBNull(空值),可以在分组的时候处理一下,避免潜在的异常:

var duplicateNames = table.Rows.Cast<DataRow>()
    .GroupBy(row => row["name"] ?? DBNull.Value) // 处理空值情况
    .Where(group => group.Count() > 1)
    .Select(group => group.Key)
    .ToList();

这样就能准确把所有name重复的行提取到新表中啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:21:21