Cenni preliminari su LINQ to DataSet
DataSet è uno dei componenti più utilizzati di ADO.NET. Rappresenta un elemento chiave del modello di programmazione disconnesso su cui si basa ADO.NET e consente di memorizzare in modo esplicito nella cache dati di origini dati diverse. Per il livello della presentazione DataSet è strettamente integrato nei controlli GUI per il data binding. Per il livello intermedio fornisce una cache che mantiene la forma relazionale dei dati e include servizi di navigazione all'interno della gerarchia e di query semplici e rapidi. Una tecnica comune usata per ridurre il numero di richieste su un database consiste nell'usare DataSet per la memorizzazione nella cache di livello intermedio. Si consideri, ad esempio, un'applicazione Web ASP.NET. Spesso, una parte significativa dei dati dell'applicazione non viene modificata frequentemente ed è comune a più sessioni o utenti. Tali dati possono essere mantenuti in memoria sul server Web, in modo da ridurre il numero di richieste al database e velocizzare le interazioni utente. Un altro aspetto utile di DataSet è che consente a un'applicazione di portare nello spazio dell'applicazione subset di dati da una o più origini dati. L'applicazione può quindi modificare i dati in memoria, mantenendo comunque la propria forma relazionale.
Nonostante l'importanza che lo contraddistingue, DataSet dispone di funzionalità limitate di query. È possibile usare il metodo Select per il filtro e l'ordinamento e i metodi GetChildRows e GetParentRow per la navigazione all'interno della gerarchia. Per operazioni più complesse, tuttavia, lo sviluppatore deve scrivere una query personalizzata. Le applicazioni risultanti possono quindi essere difficilmente gestibili e caratterizzate da prestazioni inadeguate.
Con LINQ to DataSet è più facile e veloce eseguire una query su dati memorizzati nella cache di un oggetto DataSet. Queste query sono espresse nel linguaggio di programmazione stesso, anziché come valori letterali stringa incorporati nel codice dell'applicazione. Gli sviluppatori non devono pertanto imparare un diverso linguaggio di query. Inoltre, LINQ to DataSet consente agli sviluppatori di Visual Studio di lavorare in modo più produttivo, perché l'IDE di Visual Studio fornisce il controllo della sintassi in fase di compilazione, la digitazione statica e il supporto di IntelliSense per LINQ. LINQ to DataSet può inoltre essere usato per eseguire query su dati che sono stati consolidati da una o più origini dati. In tal modo sono possibili molti scenari in cui è necessario poter rappresentare e gestire i dati con flessibilità. In particolare, questo tipo di modifiche sono richieste nelle applicazioni generiche per la creazione di rapporti, di analisi e di Business Intelligence.
Esecuzione di query su DataSet con LINQ to DataSet
Prima di poter eseguire query su un oggetto DataSet utilizzando LINQ to DataSet, è necessario popolare DataSet. È possibile caricare dati in un oggetto DataSet in diversi modi, ad esempio usando la classe DataAdapter o LINQ to SQL. È possibile iniziare a eseguire query su un oggetto DataSet dopo avervi caricato i dati. La formulazione di query che usano LINQ to DataSet è simile all'uso di LINQ (Language-Integrated Query) su altre origini dati abilitate per LINQ. Le query LINQ possono essere eseguite su singole tabelle in una DataSet o su più tabelle usando gli operatori di query standard Join e GroupJoin.
Le query LINQ sono supportate su oggetti DataSet tipizzati e non tipizzati. Se si conosce lo schema di DataSet in fase di progettazione dell'applicazione, è consigliabile utilizzare DataSet tipizzati. In un DataSet tipizzato, per ciascuna colonna delle tabelle e delle righe sono disponibili membri tipizzati, pertanto le query risultano più semplici e più leggibili.
Oltre agli operatori di query standard implementati in System.Core.dll, LINQ to DataSet aggiunge diverse estensioni specifiche di DataSet che semplificano la query su un set di oggetti DataRow. Le estensioni specifiche di DataSet includono operatori per il confronto di sequenze di righe, nonché metodi che forniscono accesso ai valori di colonna di un oggetto DataRow.
Applicazioni a più livelli e LINQ to DataSet
Le applicazioni dati a più livelli sono applicazioni mirate ai dati separate in più livelli logici. Una tipica applicazione a più livelli include un livello di presentazione, un livello intermedio e un livello dati. La separazione dei componenti dell'applicazione in livelli aumenta la gestibilità e la manutenibilità dell'applicazione, Per altre informazioni sulle applicazioni dati a più livelli, vedere Usare set di dati nelle applicazioni a più livelli.
Nelle applicazioni a più livelli DataSet viene spesso usato nel livello intermedio per memorizzare nella cache le informazioni per un'applicazione Web. La funzionalità di query LINQ to DataSet viene implementata tramite metodi di estensione ed estende il DataSet ADO.NET 2.0 esistente.