Parliamo di LINQ …


Dopo il rilascio della beta 2 di Visual Studio 2008, penso sia giunta l'ora di cominciare a parlare di LINQ anche nel mio blog  e quindi inauguro una nuova categoria.


LINQ (language integrated query) rappresenta una delle novità più importanti introdotte con il .NET Framework 3.5. In poche parole rappresenta un nuovo modello di programmazione con cui possiamo usare una sintassi "alla SQL", per intenderci, direttamente da C# o da VB.NET. Questa nuova sintassi non si applica solo per interrogazioni eseguite su database relazionali, ma anche alle collezioni di oggetti e all' XML.


Pensando a VS 2008 è interessante approfondire almeno le seguenti implementazioni di questo modello di programmazione:



  • LINQ to Objects
  • LINQ to XML
  • LINQ to SQL
  • LINQ to DataSet

LINQ si basa su delle estensioni al linguaggio che rendono possibile implementare lo stesso approccio di programmazione anche verso altre sorgenti dati.


Vediamo qualche semplice esempio con VS 2008 per capire meglio, partiamo da LINQ to Objects, nei prossimi post mi occuperò delle altre implementazioni. LINQ to SQL ed il supporto offerto da VS 2008 in particolare è sicuramente una degli aspetti più intersessanti e di maggior utilità in molte applicazioni.


LINQ to Objects


Creiamo una semplice console application in C# 3.0. Notiamo come prima cosa la presenza di un nuovo namespace System.Linq. Creiamo una semplice array di stringe e poi usiamo LINQ per effettuare un'operazione di filtraggio


linq1


Da queste poche righe notiamo alcune cose importanti: abbiamo utilizzato LINQ per filtrare un array di stringhe, nell'esempio è molto chiaro cosa vogliamo ottenere e la sintassi che usiamo assomiglia molto a quella che avremmo usato per fare una query su un database. Nel codice f è una stringa e anche l'IDE di VS lo riconosce come tale.


linq5


Notate che f ha il metodo StartWith, normalmente presente per le stringhe e nella figura anch VS la riconosce con l'IntelliSense.


Una nuova keyword "var" appare nel codice in C#. Grazie all'uso di var il compilatore stabilisce il tipo della variabile a partire dalla sua dichiarazione. Quindi la variabile nell'esempio è una stringa. Allo stesso modo scrivendo "var i = 1; var b = true;" il compilatore è in grado di inferire che la variabile i è un intero e che b è di tipo boolean.


L'output del nostro programma è quello che ci aspettiamo la variabile fruttiPreferiti contiene le due stringhe che iniziano con la lettera "m", cioè mela e mandarino.


Avremmo potuto utilizzare non solo stringhe ma anche dei tipi custom, come ad esempio una lista di clienti e effetuare altre operazioni utilizzando altri operatori standard di LINQ, si veda ad esempio il seguente codice:


linq4


Nell'esempio di codice sopra riportato si vuole ottenenere la lista dei clienti odinati in modo discendente di sola nazionalità italiana.


Notiamo alcune cose interessanti: nella classe cliente le proprietà sono dichiarate con una sintassi semplificata. Anche questa è una delle novità introdotta dal C# 3.0. Comoda vero?


Nella creazione della lista clienti i nuovi clienti sono creati e allo stesso tempo sono inizializzate le proprietà Nome e Nazione. Questo nuovo costrutto del linguaggio viene chiamato Object Initializer. Notate che la classe Cliente, non ha costruttori a cui passare i due parametri per inizializzare le proprietà. 


Infine ho utilizzato due nuovi operatori orderby e descending, il cui significato mi sembra scontato.  Alla fine ecco l'output della nostra applicazione:


image


 Usiamo VB.NET


Fino ad ora abbiamo scritto il codice utilizzando C# ed in particolare il C# 3.0 con alcune delle nuove estensioni al linguaggio, come la keywork var, la generazione automatica delle proprietà e l'Object Initializer. Tuttavia anche VB.NET mette a disposizione le stesse estensione e altre nel nuovo VB.NET 9.0.


Ecco un esempio:


image


Da notare:


La classe Person non ha costruttori. Abbiamo creato una lista di people ed abbiamo usato anche in questo caso l'Object Initializer per creare istanze delle classe e inizializzare le relative proprietà, notate l'uso delle parentesi graffe.


Anche in questo caso il compilatore è in grado di inferire il tipo diteeagers e di teen usato nel ciclo For Each.


Ecco infinre l'output:


image


Da dove partire ...


Spero di avere stimolato la curiosità di chi si avvicina per la prima volta a LINQ. Per chi vuole cominciare a fare qualche prova consiglio questo percorso:



  1. Scaricare la beta 2 di Visual Studio 2008
  2. Laboratori di Linq in C#
  3. Laboratori di Linq in VB.NET

 


Qualche link utile


The LINQ Project


Esempi VS08 Beta 2, anche HOL (laboratori) su LINQ

C# 3.0 Language Specification

 


Interessante vero? Ai prossimi post su LINQ.


-Pietro

Comments (7)
  1. LINQ rappresenta una delle novità più importanti per lo sviluppo nella prossima release di Visual Studio.

  2. LINQ rappresenta una delle novità più importanti per lo sviluppo nella prossima release di Visual Studio.

  3. giorgio says:

    Grazie pietro per il bel tutorial.

    Personalmente LINQ è sicuramente utile per aumentare e velocizzare molti processi ma per me che sono ancora un neofita è ancora da approfondire.

    Continua con i tutorial e grazie

  4. PietroBr says:

    Grazie giorgio,

    se si interessato ti consiglio anche i webcast su linq su msdn al link: http://www.microsoft.com/italy/msdn/risorsemsdn/platform/path/default.mspx

    Inoltre esiste una community italiana da poco nata su linq:www.linqitalia.com

    Spero ti siano utili

    -Pietro

  5. Giorgio says:

    Ciao Pietro,

    purtroppo ho letto solo ora il post perchè la salute è venuta un pochino meno e sono stato operato ma per fortuna tutto bene.

    Ho visto i webcast e sono interessantissimi e ho deciso anche di studiare a fondo e prendere le certificazioni microsoft alemo per gli esami 305-306-315-316 e 300 sui webservice in maniera da prendere le certificazioni per web app developer e windows ap developer 🙂 speriamo di esserne all’altezza.

    A tal proposito ho anche preso di spunto te e molti altri "guru" e ho deciso di aprire dei blog che trattano vb.net,c#,asp.net,mssql,asp.net ed ajax(per LINQ prima studio poi vedo un pochino se fare un blog).

    Se puo interessarti dare un occhio ai primi articolini che ho scritto sarò ben lieto di inviarti o di postarli in maniera che siano una nuova risorsa utile o almeno spero:)

    -Giorgio

  6. PietroBr says:

    Ciao Girgio,

    mi fa piacere che ora tu stia meglio.

    Mandami pure una mail da quersto blog con i riferimenti al tuo nuovo blog, sarò lieto di leggerli.

    Grazie

    -Pietro

Comments are closed.

Skip to main content