Alessandro Del Sole's Blog

{ A programming space about Microsoft® .NET® }
posts - 1908, comments - 2047, trackbacks - 352

My Links

News

Your host

This is me! Questo spazio è dedicato a Microsoft® .NET®, di cui sono molto appassionato :-)

Cookie e Privacy

Disabilita cookie ShinyStat

Microsoft MVP

My MVP Profile

Microsoft Certified Professional

Microsoft Specialist

Xamarin Certified Mobile Developer

Il mio libro su VB 2015!

Pre-ordina il mio libro su VB 2015 Pre-ordina il mio libro "Visual Basic 2015 Unleashed". Clicca sulla copertina per informazioni!

Il mio libro su WPF 4.5.1!

Clicca sulla copertina per informazioni! E' uscito il mio libro "Programmare con WPF 4.5.1". Clicca sulla copertina per informazioni!

These postings are provided 'AS IS' for entertainment purposes only with absolutely no warranty expressed or implied and confer no rights.
If you're not an Italian user, please visit my English blog

Le vostre visite

I'm a VB!

Guarda la mia intervista a Seattle

Follow me on Twitter!

Altri spazi

GitHub
I miei progetti open-source su GitHub

Article Categories

Archives

Post Categories

Image Galleries

Privacy Policy

Ottenere i duplicati in una collection con LINQ e Visual Basic

Spesso si ha la necessità di ottenere l'elenco di oggetti duplicati all'interno di una collection .NET, soprattutto se questa è collegata a una maschera di inserimento dati, lato interfaccia.

LINQ permette di ottenere questo risultato in modo piuttosto semplice. Consideriamo per esempio di avere una classe Customer, che rappresenta un cliente e una collezione di oggetti Customer. Qualunque sia il tipo della collezione ci si aspetta che implementi IEnumerable(Of Customer), quindi una List oppure una ObservableCollection se siamo in ambito WPF.

Possiamo quindi scrivere un metodo come il seguente, in cui la clausola Group By raggruppa tutte le istanze Customer in base alla proprietà CompanyName:

    Private Function CheckForDuplicates(ByVal customerCollection As IEnumerable(Of Customer)) As IEnumerable(Of String)
        Dim customerQuery = From cust In customerCollection
                                 Group By NomeAzienda = cust.CompanyName
                                 Into Duplicati = Group, Count()
                                 Where Duplicati.Count > 1


        Dim duplicates As New List(Of String)

        For Each item In customerQuery
            duplicates.Add(item.NomeAzienda)
        Next

        Return duplicates.AsEnumerable
    End Function

Si noti che l'utilizzo di Into Group, Count ci permette di stabilire la quantità di elementi duplicati semplicemente verificando che Count sia maggiore di 1, per ciascuna istanza di Customer.

Successivamente viene costruita una lista di stringhe che conterrà tutte le stringhe duplicate, che costituiscono il risultato effettivo della query. Tale lista viene poi restituita al chiamante e andrà ciclata per ottenere l'elenco dei duplicati.

Alessandro

Print | posted on mercoledì 1 dicembre 2010 17:29 | Filed Under [ Visual Basic LINQ ]

Powered by:
Powered By Subtext Powered By ASP.NET