10

Sep

LINQ: Parte I

Ciao a tutti!

in questa lezione parleremo di LINQ. LINQ, abbreviazione di Language INtegrated Query, è una delle novità più rilevanti del .NET Framework 3.5: grazie ad esso, è possibile effettuare interrogazioni su classi enumerabili, collezioni, basi di dati e file XML utilizzando una sintassi simile a quella di SQL. Per iniziare subito a capire come funziona iniziamo con un bel esempio:

 

string[] colors =
{
"Red",
"Brown",
"Orange",
"Yellow",
"Black",
"Green",
"White",
"Violet",
"Blue"
};
 
IEnumerable<string> results = from c in colors
where c.StartsWith("B")
orderby c
select c;

Come prima cosa creiamo un array e lo popoliamo con delle stringhe che corrispondono a vari colori, di seguito scriviamo una espressione LINQ che ci permette di cercare tutti i colori che iniziano con la lettera B nel nostro array.  Vedendo la query LINQ si nota che l’espressione assomiglia ad una istruzione SQL, ma la clausola from è all’inizio mentre la clausola select è alla fine.  La variabile c, in questo caso, è implicitamente impostata come stringa perché stiamo iterando un array di stringhe. La key from produce un oggetto generico IEnumerable, che alimenta la parte successiva della dichiarazione LINQ: la key where. Questa serve per filtrare i risultati proprio come nelle sinstassi SQL. Poi troviamo la key ORDER BY accetta un oggetto generico un IEnumerable e ordina in base ai criteri impostati. Per finire analizziamo la key select che deve essere sempre l'ultima parte di qualsiasi espressione LINQ. Qui si imposta cosa vogliamo che questa query ci ritorna, se l’intero oggetto o qualcosa di diverso.

Come viene eseguita la query.

Una query LINQ è un oggetto generico IEnumerable di ciò che si seleziona. La variabile a cui questo risultato viene assegnato è conosciuta come “variabile di intervallo”. Questa non è una raccolta popolata, è semplicemente un oggetto “query” dal quale è possibile recuperare i dati. LINQ non accede ai dati fino a quando non si tenta di utilizzare l'oggetto “query”  per lavorare con i risultati. Questo è noto come esecuzione posticipata.

LINQ è stato sviluppato per diversi provider e per ognuno sono state implementate features focalizzate sul data source. Ecco una lista dei provider supportati:

  • LINQ to Objects
  • LINQ to DataSets
  • LINQ to SQL
  • LINQ to Entities
  • LINQ to XML

Anonymous Type

Quando preleviamo dati dal una tabella(o insieme di tabelle) ci capita spesso di non aver bisogno di tutti i campi e di non aver voglia di creare un nuovo tipo a posta per contenere i campi della query. Bene, grazie alla parola chiave select possiamo selezionare solo quello che ci interessa e in maniera automatica viene creato un tipo anonimo che ci facilità l’utilizzo dei dati prelevati. Vediamo un esempio:

var car = from c in ListCars
                where c.Year > 2000
                Select new {
                Name= c.Name,
                Year = c.Year
 
                 };

In questo esempio la variabile car sarà di tipo Anonymous Type! Se provaste a scrivere car. notereste che ci sono due proprietà chiamate Name e Year(che sono quelle che abbiamo inserito nella select). Le Anonymous Type ci tornano molto utili quando dobbiamo bindare i dati con dei controlli GUI.

 

Fine prima parte.

by Carmine Punella on 9/10/2011
Post archive