Linq To SQL e VB.net: GroupBy()

Molto spesso, nella gestione di dati, abbiamo la necessità di raggruppare i risultati ottenuti, secondo alcuni criteri particolari. In Sql questo è possibile tramite la parola chiave Group By, seguito dal nome dai criteri secondo cui vogliamo ottenere il raggruppamento, ovviamente però, per conoscere in dettaglio quali campi sono stati raggruppati, è necessario effettuare un'operazione di join con la tabella sorgente.

In Linq è tutto molto più semplice, l'istruzione GroupBy(...) ci restituisce una lista di tabelle, ogni tabella è costituita da tutti gli elementi della tabella madre che hanno in comune la clausola di raggruppamento.

es. abbiamo questa tabella:
 
Vogliamo raggruppare i clienti per provincia:
Dim db As New myDataContext
dim clientiPerProvincia = db.Clienti.GroupBy(Function(c) c.Provincia)

il risultato che otteniamo è che in clientiPerProvincia abbiamo 4 tabelle

 
ognuna delle quali può essere raggiungibile, per esempio, con un istruzione For oppure direttamente col metodo ElementAt(...).
es.
dim primaProvinciaPrimoCliente as string = clientiPerProvincia.ElementAt(0).ElementAt(0).Cliente
Il primo ElementAt individua la tabella, il secondo il cliente.
oppure
For Each p In clientiPerProvincia 'scorre ogni tabella
    Console.Writeline(p.key) 'key contiene la chiave del raggruppamento
    For Each c In p 'scorre ogni cliente
        Console.Writeline("--" & c.Cliente)
    Next
Next

il risultato sarà :

TA
--A
--B
--E
BR
--C
LE
--D
--F
--G
BA
--H

0 commenti:

Posta un commento