LINQ
Language Integrated Query (LINQ, si pronuncia "link") è un componente del .NET Framework di Microsoft che aggiunge funzionalità di interrogazione ai linguaggi .NET utilizzando una sintassi simile a SQL. LINQ è stato distribuito come componente del .NET Framework 3.5 il 19 novembre 2007.
LINQ estende il linguaggio con l'aggiunta di query expression, simili a dichiarazioni SQL, che possono essere utilizzate per estrarre e processare dati da array, classi enumerabili, documenti XML, database relazionali e sorgenti dati di terze parti.
Segue un breve esempio sull'uso di LINQ scritto in C#:
int SomeValue = 5;
var results = from c in SomeCollection
let x = SomeValue * 2
where c.SomeProperty < x
select new {c.SomeProperty, c.OtherProperty};
foreach (var result in results)
Console.WriteLine(result);
Architettura
[modifica | modifica wikitesto]Standard Query Operator
[modifica | modifica wikitesto]LINQ definisce parole riservate e metodi che prendono il nome di Standard Query Operator. Le parole riservate vengono tradotte dal compilatore nelle chiamate ai metodi equivalenti. Per i metodi che non hanno una parola riservata equivalente, si utilizza la sintassi del metodo.
Language extensions
[modifica | modifica wikitesto]LINQ definisce diverse estensioni di linguaggio che forniscono zucchero sintattico per la scrittura di query.
Di seguito le principali estensioni.
Query Syntax
[modifica | modifica wikitesto]Un linguaggio è libero di scegliere una sintassi per le query che verrà riconosciuto nativamente. Queste parole chiave del linguaggio devono essere tradotte dal compilatore in chiamate ai metodi LINQ appropriati.
Variabili con tipizzazione implicita
[modifica | modifica wikitesto]Questa estensione consente di dichiarare variabili senza specificarne i tipi. I linguaggi C# 3.0 e Oxygene le dichiarano con la parola chiave var
. In VB9.0, la parola chiave Dim
senza dichiarazione del tipo ha lo stesso scopo. Tali oggetti rimangono comunque fortemente tipizzati; per questi oggetti, il compilatore deduce i tipi delle variabili tramite inferenza dei tipi, il che consente di specificare e definire i risultati delle query senza dichiarare il tipo delle variabili intermedie.
Tipi anonimi
[modifica | modifica wikitesto]I tipi anonimi offrono un modo pratico per incapsulare un set di proprietà di sola lettura in un singolo oggetto, senza dover definire prima un tipo in modo esplicito. Questo è utile per gli operatori Select
e Join
, i cui tipi di risultato possono differire dai tipi degli oggetti originali. Il compilatore utilizza l'inferenza dei tipi per determinare i campi contenuti nelle classi e genera accessori e mutatori per questi campi.
Inizializzatori di oggetti
[modifica | modifica wikitesto]Gli inizializzatori di oggetti permettono di creare e inizializzare un oggetto in un unico ambito, come richiesto dagli operatori Select
e Join
.
Espressioni lambda
[modifica | modifica wikitesto]Le espressioni lambda consentono di scrivere predicati e altre funzioni di proiezione inline con una sintassi concisa e supportano la chiusura lessicale completa.
Voci correlate
[modifica | modifica wikitesto]Collegamenti esterni
[modifica | modifica wikitesto]- LINQ su MSDN Library, su msdn.microsoft.com.