Introduzione a LINQ

5 pagine in totale: <<Indietro 1 2 [3] 4 5 Avanti >>

LINQ To XML

Gli esempi visti fino ad adesso hanno avuto a che fare con liste di oggetti già caricate in memoria, ma la situazione dove LINQ esprime la sua massima potenza è sicuramente quando deve interagire con sorgenti dati dinamiche come un file xml.
Si prenda ad esempio un file xml che riporti gli stessi dati della collection usata in precedenza:

<Persone>
  <Persona>
    <Nome>Stefano</Nome>
    <Cognome>Mostarda</Cognome>
    <Eta>14</Eta>
    <Citta>Roma</Citta>
  </Persona>
  ...
</Persone>

Supponendo di voler trasformare questa struttura xml in una lista di oggetti Persona, il primo processo che potrebbe venire in mente è di utilizzare la deserializzazione. LINQ va oltre questo mero processo di mapping e permette di specificare i nodi da prelevare e di trasformarli poi in oggetti.

var result = from p in XElement.Load(Server.MapPath("/") + "Persone.xml").Elements("Persona")
  select new Persona {
    Nome = (string)p.Element("Nome"),
    Cognome = (string)p.Element("Cognome"),
    Eta = (int)p.Element("Eta"),
    Citta = (string)p.Element("Citta")
  };

In questo modo, il processo di trasformazione di un xml in una lista di classi è estremamente più semplice ed inoltre, avendo a disposizione una lista di classi, si può sfruttare la sintassi già vista nella sezione precedente per eseguire delle query sugli oggetti.

var query = from p in result
  where p.Eta > 17
  select p;

La scelta di caricare un intero file xml in memoria per poi effettuare delle ricerche è accettabile nel momento in cui i dati sono di dimensioni abbastanza limitate. Quando però questa condizione non è soddisfatta, sicuramente torna più utile eseguire query direttamente sulla sorgente dati.

var query = from p in XElement.Load(Server.MapPath("/") + "Persone.xml").Elements("Persona")
  where (string)p.Element("Citta") == "Roma"
  select new Persona
  {
    Nome = (string)p.Element("Nome"),
    Cognome = (string)p.Element("Cognome"),
    Eta = (int)p.Element("Eta"),
    Citta = (string)p.Element("Citta")
  };

In questo modo il file xml viene caricato in memoria e successivamente interrogato per ricercare tutte le persone che abitano a Roma. Questa ricerca è estremamente più performante della precedente, ma presenta un vantaggio ancora più grande: non fa uso di XPath per attraversare la struttura dati. XPath è un linguaggio che sta all'xml come l'SQL sta al database, ma con una grossa differenza: è estremamente complicato e di difficile comprensione. Ecco quindi un altro motivo per cui LINQ è sicuramente un motore di query estremamente versatile e potente.

5 pagine in totale: <<Indietro 1 2 [3] 4 5 Avanti >>

Contenuti dell'articolo

Commenti
Dai un voto a questo articolo, ci aiuterà a migliorare il nostro sito (1 è il voto minimo, 5 il massimo).

Per procedere al rating dell'articolo devi essere autenticato.
dadox77 scrive:
Introduzione a LINQ

Ciao StefanoIntanto complimenti per lo splendido articolo...Mai come in questo caso posso dire "quanto è piccolo il web"...ci siamo lasciati in quel ...
lunedì 24 marzo 2008

Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.



TUTORIALS


IN EVIDENZA
MISC