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

如何使用DataTable.Select()筛选DataTable中的唯一条目?

获取DataTable中指定列的唯一条目行

嘿,我懂你的痛点——DataTable.Select()确实没有直接对应SQL里DISTINCT的原生语法,不过咱们有好几种靠谱的方法能实现你要的效果,下面给你详细说说:

方法一:用LINQ快速实现(推荐)

如果你的项目已经引用了System.Linq命名空间,这绝对是最简洁的方式。我们可以通过分组+取每组首行的方式,直接拿到每个USER_ID对应的唯一行:

// 假设你的DataTable实例叫dt
var uniqueUserRows = dt.AsEnumerable()
                       .GroupBy(row => row.Field<string>("USER_ID"))
                       .Select(group => group.First())
                       .ToArray();

之后你就可以用你原来的遍历逻辑处理这些行:

for(int i = 0; i < uniqueUserRows.Length; i++) 
{ 
    string id = uniqueUserRows[i]["USER_ID"].ToString(); 
    // 把id设置到图表X轴的逻辑写在这里
}

方法二:传统遍历+HashSet去重(无LINQ依赖)

如果你不想用LINQ,也可以用传统的遍历方式配合HashSet来高效去重——HashSet的Contains方法比普通List快得多,适合数据量较大的场景:

List<DataRow> uniqueRowsList = new List<DataRow>();
HashSet<string> processedIds = new HashSet<string>();

foreach(DataRow row in dt.Rows)
{
    string userId = row["USER_ID"].ToString();
    // 如果这个ID还没被处理过,就加入列表
    if(!processedIds.Contains(userId))
    {
        processedIds.Add(userId);
        uniqueRowsList.Add(row);
    }
}

// 转换成你需要的DataRow[]数组
DataRow[] rows = uniqueRowsList.ToArray();

补充说明

DataTable.Select()的表达式参数只能用来做行筛选(类似SQL的WHERE子句),没办法直接实现去重逻辑,所以必须借助分组或者额外的记录集合来完成唯一条目的提取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 21:32:35