在具有多个条件的DataTable中选择重复值

时间:2018-01-25 11:59:55

标签: mysql vb.net linq datatable

我有一个数据表(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 |
+----+--------+----------+

谢谢

1 个答案:

答案 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")))