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

C#中如何查询DataTable并检查是否存在重复记录?

C# 中 DataTable 检查重复记录的实现方法

C# 中完全可以实现和你给出的SQL语句等价的逻辑,常见有两种实现方案:

方案1:使用LINQ查询(语法更接近SQL,可读性高)

需要先引入对应命名空间,且项目需引用System.Data.DataSetExtensions程序集(.NET Framework和.NET Core/.NET 5+默认都带,无需额外安装)。

引用命名空间

using System;
using System.Linq;
using System.Data;

代码示例(查询指定JobNum和ProcessNum的记录数)

// 替换为你自己的DataTable实例
DataTable dt = GetYourDataTable();

string targetJob = "1234";
string targetProcess = "5678";

var result = dt.AsEnumerable()
    // 对应SQL的where条件
    .Where(r => r.Field<string>("JobNum") == targetJob 
             && r.Field<string>("ProcessNum") == targetProcess)
    // 对应SQL的group by两列
    .GroupBy(r => new { 
        Job = r.Field<string>("JobNum"), 
        Process = r.Field<string>("ProcessNum") 
    })
    // 对应SQL的select count、两列字段
    .Select(g => new {
        Count = g.Count(),
        JobNum = g.Key.Job,
        ProcessNum = g.Key.Process
    })
    .FirstOrDefault();

if (result != null)
{
    Console.WriteLine($"记录数:{result.Count},JobNum:{result.JobNum},ProcessNum:{result.ProcessNum}");
    // 大于1即为存在重复
    if (result.Count > 1)
    {
        Console.WriteLine("存在重复记录");
    }
}
else
{
    Console.WriteLine("未找到匹配记录");
}

注意:如果你的JobNum和ProcessNum字段是int类型,把代码中的Field<string>替换为Field<int>即可,同时去掉字段值的引号。

方案2:使用DataTable原生Select方法(无需额外依赖)

直接用DataTable自带的筛选方法,写法更简单,适合轻量场景:

DataTable dt = GetYourDataTable();
// 对应SQL的where条件
string filter = "JobNum = '1234' AND ProcessNum = '5678'";
DataRow[] matchedRows = dt.Select(filter);

int count = matchedRows.Length;
Console.WriteLine($"匹配记录数:{count}");
if (count > 1)
{
    Console.WriteLine("存在重复记录");
}

额外场景:查询全表所有重复的JobNum+ProcessNum组合

如果不需要指定具体值,要查整个表中所有重复的组合,直接用以下LINQ代码即可:

var duplicates = dt.AsEnumerable()
    .GroupBy(r => new { 
        Job = r.Field<string>("JobNum"), 
        Process = r.Field<string>("ProcessNum") 
    })
    .Where(g => g.Count() > 1)
    .ToList();

if (duplicates.Any())
{
    Console.WriteLine($"共找到{duplicates.Count}组重复记录:");
    foreach (var dup in duplicates)
    {
        Console.WriteLine($"JobNum:{dup.Key.Job},ProcessNum:{dup.Key.Process},重复次数:{dup.Count()}");
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 06:06:04