Non c'è alcun dubbio che la più grande novità del .NET Framework sia LINQ. Grazie a questa piattaforma si possono finalmente scrivere query sui dati direttamente nel linguaggio senza preoccuparsi (entro certi limiti) di quale sia la sorgente. Ad esempio, una query del genere:
from p in persone where p.Eta > 30 select p;
potrebbe essere eseguita su una lista di persone come su una tabella di un database ed il codice non cambierebbe. Non solo, non dobbiamo preoccuparci di modellare il risultato della query in classi poichè ci pensa già LINQ. Questa astrazione tra la rappresentazione della query e la sorgente dati permette a LINQ di essere estendibile e quindi chiunque può scrivere un provider per interrogare qualunque tipologia di sorgente. Ad esempio, si può scrivere un provider per interrogare un Web Service; di questo viene data un'ottima dimostrazione nell'articolo dello speciale a cura di Alessandro Catorcini (Lead PM prima del CLR del .NET ed ora dei Windows Live Services) dove si parla di come scrivere un provider per LINQ che interroghi il servizio di ricerca Live Search.
Grazie a questa estensibilità, dovuta all'architettura a provider, il .NET Framework comprende già quattro implementazioni (dette flavours):
- LINQ To Objects: grazie a questo si possono effettuare query su qualunque lista di oggetti in memoria.
- LINQ To XML: tramite questa implementazione si possono effettuare query verso file e stringhe in formato XML.
- LINQ To Dataset: questa feature permette di effettuare query su Datatable.
- LINQ To SQL: questa caratteristica rappresenta la grande novità in quanto introduce un ORM abbastanza potente e semplice da utilizzare.
Come funziona LINQ
LINQ ha un funzionamento abbastanza semplice. Qualunque oggetto, per essere interrogabile, deve implementare direttamente, o indirettamente, l'interfaccia IEnumerable o IEnumerable<T> . Quando arriva il momento di eseguire la query, i comportamenti cambiano a seconda del flavour di LINQ che si sta utilizzando.
Se si sta utilizzando LINQ To Objects o LINQ To XML o LINQ To Dataset, vengono effettuate delle iterazioni sugli oggetti per recuperare i dati. Nel caso di LINQ To SQL, entrano in gioco le interfacce IQueryProvider ed IQueryable che trasformano la query in un ExpressionTree che viene poi parsato per creare una stringa SQL da inviare al database.
In base a queste informazioni si capisce che basta implementare le interfacce IQueryProvider e IQueryable per creare un nuovo provider.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.