Alessandro Del Sole's Blog

{ A programming space about Microsoft® .NET® }
posts - 1909, 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

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

Esempio di ordinamento in una query LINQ (con e senza tipi anonimi) in Visual Basic 2008

In un precedente post abbiamo visto come eseguire una semplicissima query LINQ su una collection di oggetti per estrarre solo i dati di nostro interesse. Riprendiamo quel post e il relativo codice per vedere due nuovi concetti: l'ordinamento tramite la clausola Order By e l'uso di un tipo anonimo.

Supponiamo di avere una classe Impiegato, con due proprietà Nome e Ruolo:

Class Impiegato

 

    Private name As String

    Private role As String

 

    Property Nome() As String

        Get

            Return name

        End Get

        Set(ByVal value As String)

            name = value

        End Set

    End Property

 

    Property Ruolo() As String

        Get

            Return role

        End Get

        Set(ByVal value As String)

            role = value

        End Set

    End Property

End Class

Istanziamo una collection generica di oggetti di tipo Impiegato e la popoliamo con qualche personaggio:

        Dim impiegati As New List(Of Impiegato)

        impiegati.Add(New Impiegato With {.Nome = "Alessandro", .Ruolo = "Amministrativo"})

        impiegati.Add(New Impiegato With {.Nome = "Mario", .Ruolo = "Commerciale"})

        impiegati.Add(New Impiegato With {.Nome = "Sergio", .Ruolo = "Amministrativo"})

Ipotizziamo, ora, di voler estrarre dalla collection il solo nome degli impiegati appartenenti al ruolo "Amministrativo", ordinando il risultato in modo discendente. Una query LINQ possibile è la seguente:

        Dim amministrativi = From amministrativo In impiegati _

                             Where (amministrativo.Ruolo = "Amministrativo") _

                             Order By amministrativo.Nome Descending _

                             Select amministrativo.Nome

La collection ottenuta può poi essere iterata come segue, per visualizzare solo i due nomi appartenenti al ruolo indicato (quindi, nell'esempio, Sergio e Alessandro) il cui ordinamento è alfabetico ma inverso:

        For Each persona In amministrativi

            Console.WriteLine(persona)

        Next

 

        Console.ReadLine()

L'obiettivo è stato raggiunto tramite l'utilizzo della clausola Order By (che appunto permette di ordinare il risultato). Questa clausola consente di specificare le modalità di ordinamento, ascendente (keyword Ascending) o discendente (keyword Descending).

Il seguente snippet, invece, mostra il raggiungimento dello stesso risultato ma con l'utilizzo di un tipo anonimo nella clausola Select:

        Dim amministrativi = From amministrativo In impiegati _

                             Where (amministrativo.Ruolo = "Amministrativo") _

                             Order By amministrativo.Nome Descending _

                             Select New With {.Nome = amministrativo.Nome}

A questo punto, la variabile Amministrativi diventa una collection di tipi anonimi che può essere iterata normalmente, nella maniera seguente:

        For Each persona In amministrativi

            Console.WriteLine(persona.Nome)

        Next

 

        Console.ReadLine()

Alessandro

 

Print | posted on domenica 16 marzo 2008 17:34 | Filed Under [ Visual Basic LINQ ]

Powered by:
Powered By Subtext Powered By ASP.NET