已回答的问题
谢谢丹!您的代码运行良好,您今天救了我的命!很多互联网给你好先生。
原来的
上次社区慷慨地指导我使用 LINQ 在我的列表框中查找重复项。但是,我现在处境艰难,因为我需要从多列列表视图中查找和删除重复项。我尝试使用 LINQ,但它说 listview 对象不是“可查询的”。有没有办法让我只使用列表视图的一列来查找和删除重复项?
谢谢
更新
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 duplicates”行上仍然出现错误。
更新 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
当我调用它时,代码现在运行良好。但它不会删除重复项:
也许通过这个截图,你可以看到我在这里的目的。非常感谢你对我这么有耐心!