Što je jezično integrirani upit?

Jezični integrirani upit (LINQ) pruža mogućnost besprijekorne integracije sintakse deklarativnog upita u imperativne jezike, prvenstveno C# i VB.NET. Razvoj LINQ-a riješio je probleme na koje su se susreli programeri koji rade u objektno orijentiranim okruženjima prilikom izvođenja upita. Uveden je kao dio Microsoft® .NET Frameworka verzije 3.5 u studenom 2007. i u Visual Studio® kodnog naziva “Orcas”.

Prije kreiranja upita integriranog jezika, .NET jezici nisu imali izvorni način upita za relacijske baze podataka ili XML dokumente. Programeri koji su pisali na tim jezicima morali su ugraditi SQL ili XQuery kao stringove i ručno mapirati rezultirajuće podatke u .NET objekte. Ugrađeni nizovi upita i mapiranja nisu mogli biti potvrđeni od strane .NET prevoditelja, dopuštajući otkrivanje potencijalnih pogrešaka tijekom izvođenja.

Drugi problem s kojim su se programeri suočili prije upita integriranog u jezik bio je taj da su .NET jezici imali samo objektno orijentiranu sintaksu za upite kolekcija .NET objekata. Obično bi programer ponavljao cijelu zbirku izvora, stvarajući nove zbirke rezultata na temelju kriterija pretraživanja. Programer bi također mogao transformirati podatke dok gradi zbirke rezultata. Ovaj pristup je bio glomazan; jednostavan upit za odabir napisan u C# ili VB zahtijevao bi najmanje pet redaka koda, dok bi isti upit zahtijevao jedan redak koda u jeziku upita.

Izazovi postavljanja upita unutar objektno orijentiranog okruženja dali su Microsoftu poticaj za stvaranje LINQ-a. LINQ pruža sintaksu upita koja podsjeća na SQL za korištenje u liniji s C# ili VB, zajedno sa statičkom provjerom tipa. Prilikom postavljanja upita .NET zbirkama, umjesto korištenja ugniježđenih petlji, programeri mogu koristiti LINQ sintaksu za odabir stavki i transformaciju podataka. Među ostalim prednostima, ovo rezultira manjim brojem redaka koda u usporedbi s čisto objektno orijentiranom sintaksom.

Prilikom pristupa vanjskim izvorima podataka, LINQ i prateće komponente uklanjaju potrebu za ugrađenim jezicima upita i mapiranjem podataka unutar samog .NET jezika. Kako bi izvršio mapiranje podataka, LINQ ovisi o komponentama koje se nazivaju LINQ provideri. LINQ-to-Objects je dobavljač dionica koji LINQ-u omogućuje pristup .NET zbirkama. Slično, postoje pružatelji usluga za pristup relacijskim bazama podataka i XML dokumentima. Većina ovih davatelja su komponente treće strane koje nisu uključene u .NET Framework. Bez obzira na korištenog dobavljača, svi upiti koriste istu LINQ sintaksu.

Između jezično integrirane sintakse upita i pružatelja usluga nalazi se biblioteka operatora upita koja je dodana .NET Frameworku kao dio LINQ mogućnosti. Ovi operatori obavljaju takve zadatke kao što su filtriranje, redoslijed, operacije teorije skupova i združivanje. Kako su ovi operatori dio .NET Frameworka, mogu se koristiti i bez LINQ-a ako programer tako odluči.