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

LINQ: Il metodo extension ToDictionary

Tra i vari operatori di conversione disponibili in LINQ, per convertire in altro tipo di dato il risultato di una query, esiste un metodo extension chiamato ToDictionary che converte, per l'appunto, un risultato IEnumerable o IQueryable in una collezione di tipo Dictionary(Of T, T). In questo esempio vedremo il metodo in azione in uno scenario LINQ-to-Objects, ma si può utilizzare anche con gli altri provider LINQ.

Supponiamo di avere un'applicazione Console in cui ci sia la classica e veloce classe Person:

Public Class Person

 

    'Campi pubblici per praticità

    Public Name As String

    Public LastName As String

 

End Class

Supponiamo, ora, di avere una collezione di oggetti Person, che vogliamo popolare:

Module Module1

 

    Private people As New List(Of Person)

 

    Sub Main()

 

        people.Add(New Person With {.Name = "Alessandro", .LastName = "Del Sole"})

        people.Add(New Person With {.Name = "Gianluca", .LastName = "Cannalire"})

        people.Add(New Person With {.Name = "Diego", .LastName = "Cattaruzza"})

        people.Add(New Person With {.Name = "Mario", .LastName = "De Ghetto"})

Ora fate attenzione a questa riga di codice, che ottiene tutti gli oggetti Person nella collezione e converte il risultato in un oggetto Dictionary(Of String, Person):

        'Come se dicessimo Dim query As New Dictionary(Of String, Person)

        Dim query = (From persona In people).ToDictionary(Function(p As Person) p.LastName)

Il metodo ToDictionary riceve, come argomento, un espressione lambda che determina quale proprietà della classe di interesse debba costituire la chiave nella coppia chiave/valore, che caratterizza i Dictionary, quindi in questo caso il cognome della persona. Il valore corrispondente sarà costituito dall'istanza della classe Person in cui quella proprietà è utilizzata. Infine iteriamo il risultato:

        For Each persona In query

            Console.WriteLine("{0}, {1}", persona.Key, persona.Value.Name)

        Next

 

        Console.ReadLine()

 

    End Sub

Notate come il compilatore riconosca che il valore di ciascuna coppia chiave/valore sia l'oggetto Person, quindi permette di utilizzarne le due proprietà. Il codice di cui sopra restituisce il seguente output:

Del Sole, Alessandro

Cannalire, Gianluca

Cattaruzza, Diego

De Ghetto, Mario

Alessandro

Print | posted on sabato 21 giugno 2008 14:31 | Filed Under [ Visual Basic LINQ ]

Powered by:
Powered By Subtext Powered By ASP.NET