Я сталкиваюсь здесь с умственным препятствием и надеюсь, что мне не хватает чего-то очевидного.
В любом случае, предположим, у меня есть таблица, которая выглядит следующим образом:
ID LookupValue SortOrder
============================================
1 A 1000
2 B 2000
3 B 2000
4 C 3000
5 C 4000
Я пытаюсь найти, используя Linq, места, где LookupValue
одинаков, но порядок сортировки отличается (ID
- это PK в моей таблице базы данных и не имеет отношения к этому упражнению).
Я думал, что самый простой способ - сгруппировать по LookupValue
и SortOrder
, а затем найти места, где LookupValue
появляется в результате более двух раз.
Прямо сейчас мой код для получения сгруппированной таблицы выглядит следующим образом:
Dim KeySortPairs = From d In MyDataTable _
Group By Key = d(LookupValue).ToString(), SortOrder = d(SortOrder).ToString() _
Into Group _
Select Key, SortOrder
Глядя в выходные данные отладки, приведенный выше код дает такой результат (который является правильным):
Key SortOrder
================
A 1000
B 2000
C 3000
C 4000
Чтобы получить дубликат Key
, я просматриваю результаты, подобные этому:
For Each Entry In KeySortPairs.Where(Function(t) t.Key.Count() > 1)
'Multiple Sort Orders!!'
Next
В этом коде, однако, каждая запись в сгруппированном результате возвращается. Я что-то упустил, или этот подсчет должен давать только те записи, где Key
появляется более одного раза? Я предполагаю, что делаю тривиальную ошибку из-за моего низкого уровня комфорта с VB.NET, но я не могу понять это - я пытался переместить Count()
в WHERE
предложение на Linq выражение, но это дало мне то же самое.