Wat is een taalgeïntegreerde zoekopdracht?
Language integrated query (LINQ) biedt de mogelijkheid om declaratieve query-syntaxis naadloos te integreren in imperatieve talen, voornamelijk C # en VB.NET. De ontwikkeling van LINQ loste de problemen op die ontwikkelaars in objectgeoriënteerde omgevingen ondervonden bij het uitvoeren van query's. Het werd geïntroduceerd als onderdeel van Microsoft® .NET Framework versie 3.5 in november 2007 en in Visual Studio® codenaam "Orcas".
Voorafgaand aan het maken van in taal geïntegreerde query, hadden .NET-talen geen eigen manier om relationele databases of XML-documenten op te vragen. Ontwikkelaars die in deze talen schrijven, moesten respectievelijk SQL of XQuery als tekenreeksen insluiten en de resulterende gegevens handmatig toewijzen aan .NET-objecten. Ingesloten queryreeksen en toewijzingen konden niet worden gevalideerd door .NET-compilers, waardoor potentiële fouten tijdens de uitvoering konden worden ontdekt.
Een ander probleem waarmee ontwikkelaars te maken hadden voordat taalgeïntegreerde query's werden uitgevoerd, was dat .NET-talen alleen objectgeoriënteerde syntaxis hadden voor queryverzamelingen van .NET-objecten. Doorgaans doorloopt de ontwikkelaar een hele broncollectie en bouwt hij nieuwe resultaatcollecties op basis van zoekcriteria. De ontwikkelaar kan de gegevens ook transformeren tijdens het samenstellen van de resultaatverzamelingen. Deze aanpak was omslachtig; een eenvoudige selectiequery geschreven in C # of VB zou ten minste vijf coderegels vereisen, terwijl dezelfde query één coderegel zou vereisen in een querytaal.
De uitdagingen van het zoeken in een objectgeoriënteerde omgeving gaven Microsoft de aanzet om LINQ te maken. LINQ biedt een syntaxis van zoekopdrachten die doet denken aan SQL, te gebruiken in lijn met C # of VB, compleet met statische typecontrole. Bij het doorzoeken van .NET-collecties kunnen ontwikkelaars in plaats van geneste lussen de LINQ-syntaxis gebruiken om items te selecteren en gegevens te transformeren. Dit resulteert onder andere in minder coderegels in vergelijking met puur objectgeoriënteerde syntaxis.
Bij toegang tot externe gegevensbronnen, hoeven LINQ en ondersteunende componenten niet langer ingesloten querytalen en gegevenstoewijzingen binnen een .NET-taal zelf te gebruiken. Voor het toewijzen van gegevens is LINQ afhankelijk van componenten die LINQ-providers worden genoemd. LINQ-to-Objects is de voorraadprovider waarmee LINQ toegang heeft tot .NET-collecties. Evenzo zijn er providers die toegang hebben tot relationele databases en XML-documenten. De meeste van deze providers zijn componenten van derden die niet zijn opgenomen in het .NET Framework. Ongeacht de gebruikte provider, alle zoekopdrachten gebruiken dezelfde LINQ-syntaxis.
Tussen de in de taal geïntegreerde query-syntaxis en de providers is een bibliotheek van query-operators toegevoegd aan het .NET Framework als onderdeel van de LINQ-voorzieningen. Deze operatoren voeren taken uit als filteren, ordenen, set-theoriebewerkingen en aggregatie. Omdat deze operators deel uitmaken van het .NET Framework, kunnen ze ook zonder LINQ worden gebruikt als de ontwikkelaar daarvoor kiest.