La
O'Reilly, sempre all'avanguardia nel mondo dell'editoria, ha avuto l'idea - non nuova, ma sempre interessante - di una collana di libri assai snelli, di massimo 80 pagine, gli
Short Cuts, da acquistare e scaricare in formato PDF; come al supermercato, vengono offerti con la formula
3x2 e, per acquisti superiori ai 30 dollari, viene offerta la consegna a domicilio in formato cartaceo, con stampa laser B/N su una sola facciata e consegna in una pratica cartellina da ufficio. L'unica, banale cosa che manca è, in effetti, proprio un adesivo identificativo sulla copertina della cartellina.
Questo minitesto che vado a presentarvi è dedicato a
Language Integrated Query (LINQ), la tecnologia che sarà disponibile nella prossima versione di C# - ma ovviamente anche VB.NET e, perché no,
IronPython,
IronRuby,
Phalanger e
Chrome - per eliminare l'
impedance mismatch fra linguaggio di programmazione e sorgenti dati ed offrire un accesso ad alto livello a tutte le fonti supportate dai
DataSource .NET - ad oggi database relazionali, documenti XML ed oggetti - esistono tre
declinazioni dell'API per le tre fonti dati citate - e dobbiamo aspettarci sicuramente futuri componenti, sia da Microsoft stessa che da terze parti; per adesso, sono già stati sviluppati
Blinq, un tool che genera un'applicazione ASP.NET dallo schema di un database, e
LINQ to Amazon, per le ricerche sull'omonimo store on line.
Il testo comincia con l'elencare i numerosi benefici che l'API apporterà - oltre all'estensibilità già ricordata, query costruibili dinamicamente, in stile SQL, all'interno del linguaggio stesso, con il check dei tipi a tempo di compilazione, il supporto di
IntelliSense e la sicurezza di esecuzione di una stored procedure - e col ricordare che
LINQ richiederà un add-on al
.NET Framework 3.0, perfettamente retrocompatibile e noto agli
addetti ai lavori come
.NET 3.5. Gli esempi di codice sono disponibili sul
sito del libro, e richiedono la CTP di
LINQ, oramai inclusa in
Orcas; vengono poi presentati alcuni esempi di query
SQL-like -
LINQ consente ogni operazione di tipo CRUD, comprese le
join - su un esempio che ci accompagnerà per tutto il testo, una lista di dottori implementata grazie ai
generics.
LINQ sfrutta l'
inferenza dei tipi ed i
tipi anonimi, due delle novità di C# 3.0; il testo prosegue presentandone l'architettura, che fondamentalmente è organizzata intorno ad un'astrazione di alto livello delle collection: lo sviluppatore usa
LINQ su una collezione di oggetti, ed è compito del compilatore C# 3.0 trasformare l'interrogazione in
Intermediate Language specifico per la sorgente dati. Quest'astrazione è alla base della estensibilità modulare di
LINQ , ed ha un'importantissima conseguenza: è possibile usare Language Integrated Query con oggetti .NET 1.* e 2.0. Vengono poi presentate le novità di C# 3.0 alla base di
LINQ, che affondano le loro radici nelle
punte di diamante di C# 2.0 ovvero
generics,
delegates e metodi anonimi; il lettore potrà comodamente fare riferimento alla mia
panoramica delle specifiche. Opportunamente, per ognuna delle novità viene fornito il codice IL generato dal compilatore, ottenuto col
Reflector di
Lutz Roeder.
Il
piatto forte del minitesto sono sicuramente gli esempi d'uso di
LINQ, seguiti dall'elenco stile
Help in linea degli operatori, che copre da solo quasi metà testo e comprende una comoda pagina riassuntiva, che indica anche se per l'operatore viene usata la
lazy evaluation. Viene mostrato come effettuare query CRUD su
DataSet, database relazionali (sfruttando un potente tool a linea di comando,
SqlMetal, che crea automaticamente una vista ad oggetti del database), documenti XML e file di testo - sfruttando l'API
LINQ to XML, dalle funzionalità equivalenti ad
XPath ed
XQuery, ma assai più semplice da usare - e su una qualsiasi collection di oggetti che implementi l'interfaccia
IEnumerable. Viene anche presentato un
esempio reale su come produrre un file XML dai log testuali di IIS.
Un semplice esempio sull'estensibilità di
LINQ, tramite l'override dell'operatore
Distinct, chiude il minitesto. Per finire, segnalo
The C# Programming Language for Java Developers che si può rivelare davvero utile.

Un testo di buon approfondimento, teorico e pratico, su una tecnologia recente e di grande interesse.