Condividi tramite


LINQ e ADO.NET

Attualmente molti sviluppatori aziendali devono utilizzare due o più linguaggi di programmazione: un linguaggio di alto livello per i livelli di presentazione e della logica di business (ad esempio Visual C# o Visual Basic) e un linguaggio di query per interagire con il database (ad esempio Transact-SQL).Se da un lato tale necessità implica per lo sviluppatore la conoscenza approfondita di diversi linguaggi, dall'altro causa problemi di mancata corrispondenza tra linguaggi nell'ambiente di sviluppo.Ad esempio, in un'applicazione che utilizza un'API di accesso ai dati per eseguire una query su un database la query viene specificata come valore letterale stringa racchiuso tra virgolette.Tale stringa di query è tuttavia illeggibile per il compilatore e non è possibile eseguire su di essa un controllo per verificare la presenza di errori, ad esempio l'utilizzo di sintassi non valida o l'effettiva esistenza delle colonne o delle righe cui fa riferimento.Non viene eseguito il controllo dei tipi dei parametri della query, né è disponibile il supporto per IntelliSense.

LINQ (Language-Integrated Query) consente agli sviluppatori di formare query basate su set nel codice dell'applicazione, senza dover utilizzare un linguaggio di query diverso.È possibile scrivere query LINQ su diverse origini dati enumerabili (ovvero origini dati che implementano l'interfaccia IEnumerable), ad esempio strutture dei dati in memoria, documenti XML, database SQL e oggetti DataSet.Sebbene queste origini dati enumerabili vengono implementate in modi diversi, espongono tutte la stessa sintassi e gli stessi costrutti di linguaggio.Poiché è possibile formare query nel linguaggio di programmazione stesso, non è necessario utilizzare un altro linguaggio di query incorporato sotto forma di valori letterali stringa che il compilatore non è in grado di riconoscere o verificare.L'integrazione di query nel linguaggio di programmazione contribuisce inoltre a incrementare la produttività dei programmatori Visual Studio fornendo il controllo dei tipi e della sintassi e il supporto per IntelliSense in fase di compilazione.Queste funzionalità riducono l'esigenza di debug di query e correzione di errori.

Il trasferimento di dati da tabelle SQL in oggetti in memoria è un'operazione spesso laboriosa e soggetta a errori.Il provider LINQimplementato da LINQ to DataSet e LINQ to SQL converte i dati di origine in raccolte di oggetti basate su IEnumerable.Il programmatore visualizza sempre i dati sotto forma di una raccolta IEnumerable, sia quando si esegue una query che quando si effettua un aggiornamento.Per la scrittura di query da eseguire su tali raccolte, viene fornito il supporto per IntelliSense.

Sono disponibili tre diverse tecnologie LINQ (Language-Integrated Query) ADO.NET: LINQ to DataSet, LINQ to SQL e LINQ to Entities.LINQ to DataSet offre un supporto più completo e ottimizzato per l'esecuzione di query su DataSet, LINQ to SQL consente di eseguire query direttamente sugli schemi di database di SQL Server e LINQ to Entities consente di eseguire query su Entity Data Model.

Nel diagramma seguente viene fornita una panoramica della correlazione tra le tecnologie LINQ ADO.NET, i linguaggi di programmazione di alto livello e le origini dati con supporto LINQ.

Cenni preliminari su LINQ to ADO.NET

Per informazioni generali sulle funzionalità del linguaggio LINQ, vedere Introduzione a LINQ.Per informazioni sull'utilizzo di LINQ nelle applicazioni, vedere la sezione Guida generale per programmatori LINQ in cui sono disponibili informazioni dettagliate sull'utilizzo delle tecnologie LINQ.

Nelle sezioni seguenti vengono fornite ulteriori informazioni su LINQ to DataSet, LINQ to SQL e LINQ to Entities.

LINQ to DataSet

DataSet rappresenta un elemento chiave del modello di programmazione disconnesso su cui si basa ADO.NET ed è ampiamente utilizzato.LINQ to DataSet consente agli sviluppatori di compilare funzionalità di query più complesse in DataSet utilizzando lo stesso meccanismo di formulazione delle query disponibile per molte altre origini dati.Per ulteriori informazioni, vedere LINQ to DataSet.

LINQ to SQL

LINQ to SQL è uno strumento utile per gli sviluppatori che non necessitano del mapping a un modello concettuale.Con LINQ to SQL è possibile utilizzare il modello di programmazione di LINQ direttamente sullo schema del database esistente.LINQ to SQL consente agli sviluppatori di generare classi di .NET Framework che rappresentano i dati.Anziché eseguire il mapping a un modello di dati concettuale, tali classi generate vengono mappate direttamente a tabelle di database, visualizzazioni, stored procedure e funzioni definite dall'utente.

Con LINQ to SQL gli sviluppatori possono scrivere il codice direttamente nello schema di archiviazione utilizzando lo stesso modello di programmazione LINQ delle raccolte in memoria e di DataSet, oltre ad altre origini dati, quali XML.Per ulteriori informazioni, vedere LINQ to SQL.

LINQ to Entities

La maggior parte delle applicazioni è attualmente scritta sulla base di database relazionali.A un certo punto è necessario che queste applicazioni interagiscano con i dati rappresentati in forma relazionale.Gli schemi di database non costituiscono sempre la soluzione ideale per la compilazione di applicazioni e i modelli concettuali di applicazione non corrispondono ai modelli logici di database.Entity Data Model è un modello di dati concettuale che può essere utilizzato per modellare i dati di un dominio particolare in modo che le applicazioni possano interagire con i dati come oggetti.Per ulteriori informazioni, vedere ADO.NET Entity Framework.

Tramite Entity Data Model, i dati relazionali vengono esposti come oggetti nell'ambiente .NET.Questo rende il livello oggetti ideale per il supporto di LINQ, consentendo agli sviluppatori di formulare query sul database dal linguaggio utilizzato per compilare la logica di business.Questa funzionalità è nota come LINQ to Entities.Per ulteriori informazioni, vedere LINQ to Entities.

Vedere anche

Altre risorse

LINQ to DataSet

LINQ to SQL

LINQ to Entities

LINQ (Language-Integrated Query)