Ответ на вопрос
Спасибо Дэн! Ваш код сработал отлично, и сегодня вы спасли мне жизнь! Много интернетов вам добрый сэр.
Исходный
Сообщество великодушно подсказало мне использовать LINQ для поиска дубликатов в моих списках в последний раз. Однако сейчас я нахожусь в затруднительном положении, потому что мне нужно найти и удалить дубликаты из представления списка с несколькими столбцами. Я пытался использовать LINQ, но он говорит, что объект списка не доступен для запроса. Есть ли способ найти и удалить дубликаты, используя только один столбец списка?
Спасибо
ОБНОВЛЕНИЕ
Private Shared Sub RemoveDuplicateListViewItems(ByVal listView As ListView)
Dim duplicates = listView.Items.Cast(Of ListViewItem)() _
.GroupBy(Function(item) item.Text)
.Where(Function(g) g.CountAtLeast(2))
.SelectMany(Function(g) g)
For Each duplicate As ListViewItem In duplicates
listView.Items.RemoveByKey(duplicate.Name)
Next
End Sub
Это то, что у меня есть до сих пор благодаря Дэну. Все еще получаю ошибки в строке дубликатов Dim.
ОБНОВЛЕНИЕ 2 Вот код модуля и функции внутри формы:
Imports System.Runtime.CompilerServices
Module CountAtLeastExtension
<Extension()> _
Public Function CountAtLeast(Of T)(ByVal source As IEnumerable(Of T), ByVal minimumCount As Integer) As Boolean
Dim count = 0
For Each item In source
count += 1
If count >= minimumCount Then
Return True
End If
Next
Return False
End Function
End Module
Private Shared Sub RemoveDuplicateListViewItems(ByVal listView As ListView)
Dim duplicates = listView.Items.Cast(Of ListViewItem)() _
.GroupBy(Function(item) item.Text) _
.Where(Function(g) g.CountAtLeast(2)) _
.SelectMany(Function(g) g)
For Each duplicate As ListViewItem In duplicates
listView.Items.RemoveByKey(duplicate.Name)
Next
End Sub
Теперь код работает нормально, когда я его вызываю. Но он не удаляет дубликаты:
Может быть, на этом снимке экрана вы можете увидеть, к чему я здесь стремлюсь. Большое спасибо за то, что вы так терпеливы со мной!