Interrogare i dati con LINQ
Con le ultime versioni del .NET Framework è stata introdotta una nuova tecnologia a livello di interazione con i databse denominata LINQ (Language Integrated Query). Si tratta di un insieme di estensioni del .NET Framework per effettuare rapide interrogazioni sui dati. LINQ estende la sintassi di C# e Visual Basic ma non rimpiazza le altre tecnologie per laccesso ai dati, rappresentando unutile alternativa alle stesse.
Questa tecnologia è denominata linguaggio integrato perchè offre la possibilità di costruire le query desiderate integrandole nella sintassi di linguaggi di programmazione ben definiti come C# e Visual Basic.
Per comprenderne le potenzialità procediamo con un esempio. Aggiungiamo un nuovo web form ad un nostro progetto e inseriamo un controllo GridView allinterno dello stesso per la visualizzazione dei dati derivanti dalla query LINQ che eseguiremo prossimamente. In questesempio utilizzeremo come origine dati la classe Auto che abbiamo visto qualche lezione fa (aggiungendo un altro modello della casa Ford, la Focus).
Nellevento Load del form inseriamo il seguente codice
if (!this.IsPostBack)
{
List<Auto> autoList = Auto.CreaListaAuto();
GridView1.DataSource = from auto in autoList
where
auto.Marca.Contains("Ford") == true
orderby auto.Marca.Length
select auto.Modello.ToUpper();
GridView1.DataBind();
}
Con questa sintassi stiamo chiedendo di riportare in griglia solo i modelli di auto di marca Ford e infatti eseguendo lapplicazione il risultato visualizzato sarà il seguente

Se modifichiamo il codice per visualizzare anche la marca dobbiamo scrivere
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
List<Auto> autoList = Auto.CreaListaAuto();
GridView1.DataSource = from auto in autoList
where
auto.Marca.Contains("Ford") == true
orderby auto.Modello.Length
select auto;
GridView1.DataBind();
}
}
e il risultato sarà il seguente
Tirando le somme il formato di una istruzione LINQ è il seguente
from <variabile in una collezione> in <collezione>
where <criteri di selezione>
orderby <criteri di ordinamento>
select <proprietà degli elementi selezionati>
La cosa più interessante è che con LINQ possiamo eseguire query (ma anche modificare i dati) sfruttando un modello indipendente dalle varie tipologie di fonti. E possibile infatti accedere a database, file di testo, file XML, array, file Excel, file di configurazione, informazioni su assembly, chiavi di registro e qualsiasi altro oggetto riconducibile ad una collezione di oggetti enumerabile.
Esistono diverse varianti di questa tecnologia, tra cui:
- LINQ to Objects - Permette di eseguire delle query su collezioni di oggetti in memoria
- LINQ to XML - Permette di eseguire delle operazioni su informazioni in formato XML
- LINQ to DataSet - Permette di eseguire delle query su DataSet tipizzati
- LINQ to SQL - Permette di rappresentare un grafo di oggetti in memoria che rappresentano gli oggetti presenti in un database SQL Server, su cui poi eseguire delle query
In particolare la tecnologia più utilizzata è LINQ to SQL per approfondire la quale vi rimando ad un articolo scritto da me qualche tempo fa che potete trovare a questa pagina.