Mis on keelega integreeritud päring?

Keele integreeritud päring (LINQ) võimaldab sujuvalt integreerida deklaratiivse päringu süntaksi kohustuslikesse keeltesse, peamiselt C# ja VB.NET. LINQ arendus lahendas probleemid, millega objektorienteeritud keskkondades töötavad arendajad päringute tegemisel kokku puutusid. Seda tutvustati Microsoft® .NET Frameworki versiooni 3.5 osana 2007. aasta novembris ja Visual Studio® koodnimega “Orcas”.

Enne keelega integreeritud päringu loomist ei olnud .NET-keeltel relatsiooniandmebaaside või XML-dokumentide päringute esitamise võimalust. Nendes keeltes kirjutavad arendajad pidid manustama vastavalt SQL-i või XQuery stringidena ja vastendama saadud andmed käsitsi .NET-objektidega. Manustatud päringu stringe ja vastendusi ei saanud .NET-i kompilaatorid kinnitada, võimaldades avastada võimalikud vead käitamise ajal.

Teine probleem, millega arendajad enne keelte integreeritud päringut silmitsi seisid, oli see, et .NET-i keeltel oli .NET-i objektide päringukogumite päringute tegemiseks ainult vastulausetele orienteeritud süntaks. Tavaliselt kordab arendaja tervet allikakogu, luues otsingukriteeriumide alusel uusi tulemuste kogusid. Samuti võib arendaja tulemuste kogude loomise ajal andmeid teisendada. See lähenemine oli tülikas; lihtne valikupäring, mis on kirjutatud C# või VB keeles, nõuaks vähemalt viit koodirida, samas kui sama päringu jaoks oleks vaja päringukeeles ühte koodirida.

Objektorienteeritud keskkonnas päringute tegemise väljakutsed andsid Microsoftile tõuke LINQ-i loomiseks. LINQ pakub SQL-i meenutavat päringu süntaksit, mida kasutatakse koos C# või VB-ga koos staatilise tüübikontrolliga. NET-i kogude päringute tegemisel saavad arendajad pesastatud silmuste kasutamise asemel kasutada üksuste valimiseks ja andmete teisendamiseks LINQ-i süntaksit. Muude eeliste hulgas on selle tulemuseks vähem koodiridu võrreldes puhtalt objektorienteeritud süntaksiga.

Välistele andmeallikatele juurde pääsedes eemaldavad LINQ ja tugikomponendid vajaduse .NET-keeles endas manustatud päringukeelte ja andmevasenduste järele. Andmete kaardistamise teostamiseks sõltub LINQ komponentidest, mida nimetatakse LINQ pakkujateks. LINQ-to-Objects on varude pakkuja, mis võimaldab LINQ-l juurdepääsu .NET-i kogudele. Samamoodi on pakkujaid, kes pääsevad juurde relatsiooniandmebaasidele ja XML-dokumentidele. Enamik neist pakkujatest on kolmanda osapoole komponendid, mis ei sisaldu .NET Frameworkis. Olenemata kasutatavast pakkujast kasutavad kõik päringud sama LINQ-i süntaksit.

Keele integreeritud päringu süntaksi ja pakkujate vahel on päringuoperaatorite teek, mis on LINQ-i vahendite osana lisatud .NET Frameworki. Need operaatorid täidavad selliseid ülesandeid nagu filtreerimine, järjestamine, hulgateooria toimingud ja liitmine. Kuna need operaatorid on osa .NET Frameworkist, saab neid kasutada ka ilma LINQ-ita, kui arendaja nii soovib.