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: Esempio di calcoli con i metodi extension

LINQ, nelle sue varie forme espressive, mette a disposizione alcuni metodi extension specifici per operazioni di calcolo nelle query.

 

Prendiamo in considerazione, ad esempio, la tabella Products dell’ormai noto database dimostrativo Northwind. Consideriamo questa poiché espone una colonna chiamata UnitPrice, cioè il prezzo unitario di ciascun prodotto.

 

Supponendo di aver già eseguito il collegamento del database, la creazione di una classe LINQ-to-SQL e il binding all’oggetto Products generato dall’IDE (operazioni descritte in questo mio articolo su VB T&T), ipotizziamo di voler ottenere la media dei prezzi unitari indicati nella colonna. Per questa operazione (come per le altre che andremo a vedere) si utilizza la clausola Aggregate.

 

Presupposto per le operazioni è l’aver istanziato il DataContext:

 

    Dim dc As New NorthwindDataContext

 

La seguente query expression ottiene il prezzo medio tra quelli indicati nella colonna UnitPrice:

        'Ottiene il prezzo medio

        Dim media = Aggregate prodotto In dc.Products _

                    Select prodotto.UnitPrice _

                    Into Average()

 

In linea più generale, quindi, il metodo extension Average rappresenta il calcolo della media dei valori contenuti in una determinata sequenza.

 

La seguente espressione, invece, determina la somma di tutti i valori riportati nella colonna UnitPrice (si noti la conversione in intero di un tipo Nullable(Of Decimal)):

 

        'Somma dei prezzi unitari

        Dim somma = Aggregate prodotto In dc.Products _

                  Select Convert.ToInt32(prodotto.UnitPrice) _

                  Into Sum()

 

Quindi il metodo extension Sum determina la somma di tutti i valori contenuti in una determinata sequenza.

 

Spesso, poi, si ha la necessità di conoscere il valore minimo e il valore massimo di una determinata sequenza. A tale riguardo LINQ fornisce due specifici metodi extension, chiamati Min e Max (ovvio, no? J). La seguente espressione determina il prezzo unitario più basso indicato nella colonna UnitPrice:

 

        'Prezzo minimo

        Dim minimo = Aggregate prodotto In dc.Products _

                   Select prodotto.UnitPrice _

                   Into Min()

 

Mentre la seguente determina la situazione contraria, ossia il prezzo unitario più alto:

        'Prezzo massimo

        Dim massimo = Aggregate prodotto In dc.Products _

                      Select prodotto.UnitPrice _

                      Into Max()

Al di là del numero di righe di codice utilizzate, questo tipo di espressione consente di ottenere i risultati desiderati con un approccio “logico” e in maniera decisamente ordinata. L’utilizzo di questa particolare tabella e di LINQ-to-SQL è una scelta “pratica”, ma questo tipo di espressioni può essere utilizzato in tutte le altre aree coperte da LINQ.

 

Alessandro

Print | posted on martedì 15 aprile 2008 01:33 | Filed Under [ Visual Basic LINQ ]

Powered by:
Powered By Subtext Powered By ASP.NET