我有一个数据表(DT),我必须在其他列的多个条件的指定列中选择重复值,并获取行的ID。 不幸的是,我是一个非常初学者。
我的DataTable包含以下列:
Id, PartNo, Group
我在下面找到了这个代码,如果我想在列中获取多个值,这是有效的,但我无法扩展它。
Dim duplicates = From row In DT.AsEnumerable() _
.GroupBy(Function(i) i.Field(Of String)("PartNo")) _
.Where(Function(g) g.Count() > 1) _
.Select(Function(g) g.Key)
For Each dup In duplicates
Debug.Print(dup)
Next
所以我想
- get the "Id" values on those rows
- where ["Group"] LIKE "Assembly" OR ["Group"] LIKE "Part"
AND
- "PartNo" value can found more than once
实施例: 在这张表中,我想得到" Id"值:1,3,5,6,8
+----+--------+----------+
| Id | PartNo | Group |
+----+--------+----------+
| 1 | 1111 | Assembly |
| 2 | 1111 | Common |
| 3 | 2222 | Part |
| 4 | 2222 | Common |
| 5 | 2222 | Part |
| 6 | 1111 | Part |
| 7 | 3333 | Assembly |
| 8 | 2222 | Assembly |
+----+--------+----------+
谢谢
答案 0 :(得分:0)
在进行分组以选择多个零件编号之前,您可以添加另一个.Where子句,然后选择。选择多个以将组展平为整数列表:
Dim duplicates = From row In DT.AsEnumerable() _
.Where(Function(i) i.Field(Of String)("Group") = "Part" OrElse i.Field(Of String)("Group") = "Assembly") _
.GroupBy(Function(i) i.Field(Of String)("PartNo")) _
.Where(Function(g) g.Count() > 1) _
.SelectMany(Function(g) g.Select(Function(c) c.Field(Of Integer)("Id")))