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

如何在DataTable中多条件筛选重复PartNo并获取对应Id值

如何筛选符合多条件的重复行并获取Id?

嘿,作为新手能写出初始的LINQ代码已经很棒啦!咱们一步步把它扩展成你需要的功能~

你的需求很明确:要从DataTable里找出Group列值为Assembly或Part,同时PartNo存在重复的行,最终获取这些行的Id。原代码只找出了重复的PartNo,但没考虑Group过滤,也没返回对应的Id,咱们来调整逻辑:

完整实现代码

' 筛选符合条件的重复行并提取Id
Dim duplicateIds = From row In DT.AsEnumerable()
                   ' 第一步:过滤Group为Assembly或Part的行
                   Where row.Field(Of String)("Group") = "Assembly" OrElse row.Field(Of String)("Group") = "Part"
                   ' 第二步:按PartNo分组
                   Group row By partNo = row.Field(Of String)("PartNo") Into Group
                   ' 第三步:只保留分组内行数>1的(即PartNo重复的分组)
                   Where Group.Count() > 1
                   ' 第四步:从每个分组中提取所有行的Id
                   Select ids = Group.Select(Function(r) r.Field(Of Integer)("Id"))
                   ' 最后:把多个分组的Id合并成一个扁平集合
                   Select Many ids

' 遍历输出结果
For Each id In duplicateIds
    Debug.Print(id.ToString())
Next

代码逻辑拆解

我给你拆解每一步的作用,方便理解:

  • 过滤Group条件:Where语句先把Group列是Common的行排除,只留下我们关心的Assembly和Part行。
  • 按PartNo分组:把过滤后的行按PartNo归类,同一个PartNo的行会被放在一个分组里。
  • 筛选重复分组:只保留分组内行数大于1的,也就是PartNo在符合Group条件的行里重复出现的分组。
  • 提取并合并Id:从每个合格的分组里提取所有行的Id,再用Select Many把分散的Id集合合并成一个可直接遍历的扁平集合。

验证示例数据

用你给出的示例表格测试这段代码,输出的Id正好是1、3、5、6、8,完全符合你的预期!

注意:如果你的Id列数据类型不是Integer,记得把r.Field(Of Integer)("Id")改成对应的类型(比如Of String)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:14:01