Parliamo di LINQ - parte 2

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

LINQ è una serie di estensioni al linguaggio, sia per C# che VB.NET, che ci permettono di utilizzare una serie di operatori "alla SQL" per lavorare su diverse sorgenti dati.

Nel primo post di questa serie ho parlato di LINQ to Objects. Vediamo ora un' introduzione a LINQ to XML con C# e VB.NET.

 

LINQ to XML

Linq to XML è l'implementazione delle estensioni al linguaggio che consentono di lavorare con l'XML. Con Linq to XML possiamo creare strutture e documenti in XML in memoria e utilizzare una sintassi per l'interrogazione e la modifica delle stesse.

Creiamo un file XML

Creiamo una console application con Visual Studio 2008 beta 2 ed aggiungiamo il seguente namespace using System.Xml.Linq; quindi scriviamo il codice in figura:

C#:

image

Mi sembra abbastanza chiaro cosa si vuole ottenere, notate l'uso delle nuove API XDocument, XDeclaretion, XElement e XAttribute. L'uso è abbastanza intuitivo.

La stessa operazione può essere fatta anche in VB.NET, ma con una sintassi diversa che ne rende ancora più semplice l'uso.

VB.NET:

image

Questa sintassi è particolare ed è unica in VB.NET, non è ammessa in C# e consente di definre in-line un frammento di XML. In VB.NET avrei potuto anche usare la sintassi equivalente a quella usata in C#, come ad esempio

image

Il risultato sarà comunque lo stesso: in tutti i casi un file XML che contiene:

image

Query sul file

Ok, ora possiamo usare Linq per fare delle query sul file:

C#:

image

Dopo aver caricato il file in un XDocument, prendiamo i nodi che sono al di sotto del tag <Clienti>, quindi i vari <Cliente>. Utilizziamo i due nodi di <nome> e <cognome> per creare un nuovo tipo, anonimo,  che contiene il valore dei due nodi dell' XML.

Così otteniamo, avendo inserito un altro cliente nel file:

image

Potremmo anche utilizzare altri operatori Linq come "where" per filtrare ulteriormente la query, come ad esempio:

image

con cui otteniamo il cliente con attributo id uguale a C02.

VB.NET

Con VB.NET possiamo scrivere:

image

Anche in questo caso ho usato una sintassi che contiene dell XML in-line nel codice, ma avrei potuto scrivere in modo equivalente alla sintassi usata in C#:

image

Ora che abbiamo visto come eseguire una semplice query usando LINQ, vediamo come a partire dal risultato ottenuto possiamo creare un un nuvo file XML, con una struttura diversa.

Supponiamo che il nostro cliente, sia diventato impiegato della nostra azienda:-) Ok, non proprio uno scenario comune, ma ci interessa solo per poter usare la query fatta in precedenza per creare un nuovo file XML con struttura diversa.

C#:

image

Nell'esempio in verde vedete evidenziate le API, che abbiamo usato in precedenza per creare un file, che in questo caso usano dei valori che arrivano da una query fatta con Linq, in giallo.

VB.NET

In VB usiamo ancora una volta la sintassi in-line per creare il nuovo XML e usiamo una query Linq per inserire i valori.

image

Il nuovo XML può essere ovviamente salvato come fatto in precedenza, ma in questo caso ci limitiamo a vederne il risulato in una console appllication:

image

Concludendo

In questo secondo post su Linq abbiamo visto come utilizzare delle nuove API (X*) per creare strutture XML e come poterle poi agevolmente salvare in un file. Linq ci ha aiutato ad interrogare le strutture XML in modo semplice ed intuitivo, per chi ha un po' di familiarità con il linguaggio SQL. Queste due caratteristiche le abbiamo poi combinate per realizzare una nuova struttura in XML i cui valori sono stati presi da una query Linq fatta sul altri dati.

Infine abbiamo visto come programmare sia in C# e in VB.NET e ho mostrato come struttare le novità in VB per poter interagire con XML in-line nell'editor di Visual Studio 2008.

Se mi avete seguito passo-passo, con una versione di Visual Studio 2008 beta 2, vi sarete accorti che la scrittura del codice è stata facilitata dall' IntelliSense. Questo anche in virtù del fatto che il codice scritto e completamente Strong-Typed, come ho già fatto notare nel post precedente, e le keywork var e Dim usate permettono al compilatore di inferire il tipo della varibile dichiarata.

Per chi non ha seguito passo-passo consiglio il seguente percorso con laboratori:

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

 

Ciao e alla prossima.

-Pietro