У меня есть datatable (DT), и я должен выбрать повторяющиеся значения в указанном столбце с несколькими условиями в других столбцах и получить идентификатор строки. К несчастью, я в этом начинаю.
Мой 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 |
+----+--------+----------+
Спасибо
Вы можете просто добавить другое предложение.Where, прежде чем группировать, чтобы выбрать несколько номеров деталей, затем.SelectMany, чтобы сгруппировать группы в список целых чисел:
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")))