Che cos'è una query integrata nella lingua?
Language Integrated query (LINQ) offre la possibilità di integrare perfettamente la sintassi delle query dichiarative in linguaggi imperativi, principalmente C # e VB.NET. Lo sviluppo di LINQ ha risolto i problemi riscontrati dagli sviluppatori che lavorano in ambienti orientati agli oggetti durante l'esecuzione di query. È stato introdotto come parte di Microsoft® .NET Framework versione 3.5 nel novembre 2007 e nel nome in codice di Visual Studio® "Orcas".
Prima della creazione di query integrate nel linguaggio, i linguaggi .NET non avevano un modo nativo per eseguire query su database relazionali o documenti XML. Gli sviluppatori che scrivevano in queste lingue dovevano incorporare rispettivamente SQL o XQuery come stringhe e mappare manualmente i dati risultanti su oggetti .NET. Le stringhe di query e i mapping incorporati non possono essere convalidati dai compilatori .NET, consentendo di rilevare potenziali errori in fase di esecuzione.
Un altro problema che gli sviluppatori hanno dovuto affrontare prima della query integrata nel linguaggio era che i linguaggi .NET avevano solo una sintassi orientata agli oggetti per interrogare raccolte di oggetti .NET. In genere, lo sviluppatore esegue l'iterazione su un'intera raccolta di origini, creando nuove raccolte di risultati in base a criteri di ricerca. Lo sviluppatore potrebbe anche trasformare i dati durante la creazione delle raccolte di risultati. Questo approccio era ingombrante; una semplice query di selezione scritta in C # o VB richiederebbe almeno cinque righe di codice, mentre la stessa query richiederebbe una riga di codice in un linguaggio di query.
Le sfide poste dalle query all'interno di un ambiente orientato agli oggetti hanno dato a Microsoft l'impulso di creare LINQ. LINQ fornisce una sintassi di query che ricorda SQL da utilizzare in linea con C # o VB, completa di controllo statico del tipo. Durante l'interrogazione di raccolte .NET, invece di utilizzare cicli nidificati, gli sviluppatori possono utilizzare la sintassi LINQ per selezionare elementi e trasformare i dati. Tra gli altri vantaggi, ciò si traduce in un minor numero di righe di codice rispetto alla sintassi orientata agli oggetti.
Quando si accede a origini dati esterne, LINQ e i componenti di supporto rimuovono la necessità di linguaggi di query incorporati e mappature dei dati all'interno di un linguaggio .NET stesso. Per eseguire il mapping dei dati, LINQ dipende da componenti chiamati provider LINQ. LINQ-to-Objects è il provider di stock che consente a LINQ di accedere alle raccolte .NET. Allo stesso modo, ci sono provider per accedere a database relazionali e documenti XML. La maggior parte di questi provider sono componenti di terze parti non inclusi in .NET Framework. Indipendentemente dal provider utilizzato, tutte le query utilizzano la stessa sintassi LINQ.
Tra la sintassi della query integrata nella lingua e i provider è presente una libreria di operatori di query aggiunta a .NET Framework come parte delle funzionalità LINQ. Questi operatori svolgono attività quali filtraggio, ordinamento, operazioni di teoria degli insiemi e aggregazione. Poiché questi operatori fanno parte di .NET Framework, possono essere utilizzati anche senza LINQ se lo sviluppatore lo desidera.