Vad är en språkintegrerad fråga?

Språkintegrerad fråga (LINQ) ger möjligheten att sömlöst integrera deklarativ frågesyntax i imperativa språk, främst C# och VB.NET. Utvecklingen av LINQ löste problemen som utvecklare som arbetar i objektorienterade miljöer stötte på när de utförde frågor. Den introducerades som en del av Microsoft® .NET Framework version 3.5 i november 2007 och i Visual Studio® kodnamn ”Späckhuggare”.

Innan skapandet av språkintegrerad fråga hade .NET-språk inget inhemskt sätt att söka efter relationsdatabaser eller XML-dokument. Utvecklare som skrev på dessa språk var tvungna att bädda in SQL respektive XQuery som strängar och manuellt mappa resulterande data till .NET-objekt. Inbäddade frågesträngar och mappningar kunde inte valideras av .NET-kompilatorer, vilket gör att potentiella fel kan upptäckas vid körning.

Ett annat problem som utvecklare stötte på innan språkintegrerad fråga var att .NET-språk endast hade objektorienterad syntax för att fråga samlingar av .NET-objekt. Vanligtvis skulle utvecklaren iterera över en hel källsamling och bygga nya resultatsamlingar baserat på sökkriterier. Utvecklaren kan också transformera data medan han bygger resultatsamlingarna. Detta tillvägagångssätt var besvärligt; en enkel urvalsfråga skriven i C# eller VB skulle kräva minst fem rader kod, medan samma fråga skulle kräva en rad kod i ett frågespråk.

Utmaningarna med att fråga i en objektorienterad miljö gav Microsoft drivkraften att skapa LINQ. LINQ tillhandahåller en frågesyntax som påminner om SQL för att användas i linje med C# eller VB, komplett med statisk typkontroll. När du frågar efter .NET-samlingar, istället för att använda kapslade loopar, kan utvecklare använda LINQ-syntax för att välja objekt och transformera data. Bland andra fördelar resulterar detta i färre rader kod jämfört med rent objektorienterad syntax.

Vid åtkomst till externa datakällor tar LINQ och stödjande komponenter bort behovet av inbäddade frågespråk och datamappningar inom själva .NET-språket. För att kunna utföra datamappning är LINQ beroende av komponenter som kallas LINQ-leverantörer. LINQ-to-Objects är aktieleverantören som gör det möjligt för LINQ att komma åt .NET-samlingar. På samma sätt finns det leverantörer för åtkomst till relationsdatabaser och XML-dokument. De flesta av dessa leverantörer är tredjepartskomponenter som inte ingår i .NET Framework. Oavsett vilken leverantör som används, använder alla frågor samma LINQ-syntax.

Mellan den språkintegrerade frågesyntaxen och leverantörerna finns ett bibliotek med frågeoperatörer som lagts till i .NET Framework som en del av LINQ-faciliteterna. Dessa operatörer utför sådana uppgifter som filtrering, beställning, uppsättningsteoretiska operationer och aggregering. Eftersom dessa operatörer är en del av .NET Framework kan de även användas utan LINQ om utvecklaren så önskar.