質問への回答
ダンありがとう!あなたのコードは完璧に機能し、今日私の命を救いました!あなたへの多くのインターネットよろしくお願いします。
オリジナル
前回、リストボックスで重複を見つけるためにLINQを使用するように、コミュニティから寛大に案内されました。ただし、複数列のリストビューから重複を見つけて削除する必要があるため、現在は困難な状況にあります。LINQを使用してみましたが、listviewオブジェクトが「クエリ可能」ではないと表示されます。リストビューの1つの列だけを使用して重複を見つけて削除する方法はありますか?
ありがとう
アップデート
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
これは私がこれまでダンに感謝したことです。「Dimduplicates」行で引き続きエラーが発生します。
UPDATE2 フォーム内のモジュールと関数のコードは次のとおりです。
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
呼び出したときにコードが正常に実行されるようになりました。ただし、重複は削除されません。
たぶん、このスクリーンショットで、私がここで何をしようとしているのかを見ることができます。我慢してくれてありがとう!