Kaj je jezikovna integrirana poizvedba?

Jezikovno integrirana poizvedba (LINQ) omogoča nemoteno integracijo sintakse deklarativne poizvedbe v imperativne jezike, predvsem C# in VB.NET. Razvoj LINQ je rešil težave razvijalcev, ki so delali v objektno usmerjenih okoljih, na katere so naleteli pri izvajanju poizvedb. Uveden je bil kot del Microsoft® .NET Framework različice 3.5 novembra 2007 in v kodnem imenu Visual Studio® »Orcas«.

Pred ustvarjanjem jezikovne integrirane poizvedbe jeziki .NET niso imeli domačega načina poizvedovanja v relacijskih bazah podatkov ali dokumentih XML. Razvijalci, ki pišejo v teh jezikih, so morali vdelati SQL oziroma XQuery kot nize in ročno preslikati nastale podatke v objekte .NET. Prevajalniki .NET niso mogli preveriti vdelanih nizov poizvedbe in preslikav, kar omogoča odkrivanje morebitnih napak med izvajanjem.

Druga težava, s katero so se soočili razvijalci pred jezikovno integrirano poizvedbo, je bila ta, da so imeli jeziki .NET le objektno usmerjeno sintakso za poizvedovanje zbirk predmetov .NET. Običajno bi razvijalec ponovil celotno izvorno zbirko in zgradil nove zbirke rezultatov na podlagi iskalnih kriterijev. Razvijalec bi lahko tudi preoblikoval podatke med gradnjo zbirk rezultatov. Ta pristop je bil okoren; preprosta poizvedba za izbiro, napisana v C# ali VB, bi zahtevala vsaj pet vrstic kode, medtem ko bi ista poizvedba zahtevala eno vrstico kode v poizvedovalnem jeziku.

Izzivi poizvedovanja v objektno usmerjenem okolju so dali Microsoftu zagon za ustvarjanje LINQ. LINQ zagotavlja sintakso poizvedbe, ki spominja na SQL, ki se uporablja v skladu s C# ali VB, skupaj s statičnim preverjanjem tipa. Pri poizvedovanju po zbirkah .NET lahko razvijalci namesto uporabe ugnezdenih zank uporabljajo sintakso LINQ za izbiro elementov in pretvorbo podatkov. Med drugimi prednostmi to povzroči manj vrstic kode v primerjavi s čisto objektno usmerjeno skladnjo.

Pri dostopu do zunanjih virov podatkov LINQ in podporne komponente odpravljajo potrebo po vdelanih poizvedovalnih jezikih in preslikavah podatkov znotraj samega jezika .NET. Za izvedbo preslikave podatkov je LINQ odvisen od komponent, imenovanih ponudniki LINQ. LINQ-to-Objects je ponudnik zalog, ki omogoča LINQ dostop do zbirk .NET. Podobno obstajajo ponudniki za dostop do relacijskih baz podatkov in dokumentov XML. Večina teh ponudnikov je komponent tretjih oseb, ki niso vključene v .NET Framework. Ne glede na uporabljenega ponudnika vse poizvedbe uporabljajo isto sintakso LINQ.

Med jezikovno integrirano sintakso poizvedbe in ponudniki je knjižnica operaterjev poizvedbe, dodana v .NET Framework kot del zmogljivosti LINQ. Ti operaterji opravljajo naloge, kot so filtriranje, razvrščanje, operacije teorije množic in združevanje. Ker so ti operaterji del .NET Framework, jih je mogoče uporabiti tudi brez LINQ, če se tako odloči razvijalec.