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.
Contenuti dell'articolo
- Pagina 1
- Pagina 2
- Pagina 3
- Pagina 4
- Pagina 5
Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.








Difficoltà
Utilità

Stampa
Download 


10annidi.ASPItalia.com: iscriviti alla competizione e vinci fantastici premi ogni mese!

Ciao StefanoIntanto complimenti per lo splendido articolo...Mai come in questo caso posso dire "quanto è piccolo il web"...ci siamo lasciati in quel ...
Continua »»» | Rispondi »»»