Pyetësori i integruar në gjuhë programuese

**LINQ** është akronim për **Language Integrated Query** (Pyetësori i integruar në gjuhë programuese), që është komponent i Microsoft .NET Framework-ut . Pjesa e integrimit në gjuhë do të thotë se LINQ është pjesë e sintaksës së gjuhëve programuese. Më saktësisht, të dyja C# dhe VB (Visual Basic) janë gjuhë që vijnë me .NET platformën dhe kanë kapacitete për LINQ. Një gjuhë tjetër që e përkrah LINQ është Delphi Prism. LINQ përdoret për kërkim/analizim të shumë llojeve të të dhënave duke përfshirë databazat relacionale, XML, madje edhe objektet. Pra LINQ e zgjeron gjuhën me shtimin e shprehjeve të pyetësorve që janë shumë të ngjajshme me komandat në SQL, dhe mund të përdoren për të përshtatur, ekstraktuar dhe procesuar të dhëna nga vargjet, klasat, enum, etj.

## Historia
LINQ është lëshuar si një pjesë kryesore e .NET Framework 3.5 më 19 nëntor, 2007.

## Arkitektura e LINQ në .NET Framework
### Operatorët standard për pyetësor (query)
Query operatorët standard janë një API (Application Programming Interface) që mundëson analizimin/kontrollimin e cilit do .NET vargu apo koleksioni. Operatorët standard për analizim/kërkim (query) në API përbëhen nga metoda të deklaruara në klasën statike System.Query.Sequence. Operatorët standard për analizim/kërkim janë metodat në modelin e Language Integrated Query (LINQ). Operatorët e përkrahur nga API janë:

;Select:
Operatori Select bën projeksionin e koleksionit për të zgjedhur vetitë e dëshiruara të elementeve.

;Where:
Operatori Where lejon definimin e një koleksioni të ri në bazë të një sërë regullash të predikateve të cilat vlejnë për objektet në koleksion, derisa objektet që nuk i përgjigjen atyre regullave filtrohen.

;SelectMany:
SelectMany mundëson selektimin e elementeve në koleksione brenda koleksioneve, duke e thjeshtuar strukturën mbajtëse.

;Sum / Min / Max / Average:
Këta operator përdorin funksione që kthejnë vlerë të caktuar numerike prej çdo elementi në koleksion dhe mund të i përdor ata për të gjetur shumën, minimumin, maksimumin apo vlerën mesatare të të gjith elementeve në koleksion.

;Aggregate:
Funskionet e gjeneralizuara si Shuma/Minimumi/Maksimumi. Ky operator merr një funksion që specifikon se si dy vlera kombinohen për të krijuar një rezultat. Vlera fillestare mund të theksohet duke lejuar që rezultati i agregimit të jetë arbitrar.

;Join / GroupJoin:
Operatori Join bën bashkimin e brendshëm e dy koleksioneve në baze të përputhjes së çelësave për secilin objekt në koleksion. GroupJoin lejon bashkimin e shumë anëtarëve në bazë të një çelësi nga koleksioni i parë.

;Take / TakeWhile:
Operatori Take selekton N objektet e para nga koleksioni, ndërsa operatori TakeWhile merr objekte përderisa predikati i cekur është i saktë.

;Skip / SkipWhile:
Operatoret Skip dhe SkipWhile janë e kundërta e Take dhe TakeWhile, këto i kalojnë N objektet e para të koleksionit apo ato përderisa predikati gjegjës vlen.

;OfType:
Ky operator përdoret për të selektuar elementet e tipit të kërkuar.

;Concat:
Operatori Concat i bashkon dy koleksione.

;OrderBy / ThenBy:
Operatori OrderBy përdoret për të specifikuar sortimin e elementeve në koleksion në baze të disa çelësave. Rradhitja e nenkuptuar është nga lart posht, forma e kundërt është operatori OrderByDescending. ThenBy operatori specifikon sortimin e ardhshëm të elementeve. 

;Reverse:
Operatori Reverse e kthen mbrapsht koleksionin.

;GroupBy:
Operatori GrouBy është funksion që lidh koleksione elementesh me çelësa të përbashkët.

;Distinct:
Operatori Distinct merr elementet e njejta vetëm nga një herë.

;Union / Intersect / Except:
Këta operator përdoren për të bërë unionin, prerjen dhe diferencën e dy koleksioneve.

;SequenceEqual:
Ky operator vendos nëse dy koleksione kane anëtar dhe radhitje të njejt.

;First / FirstOrDefault / Last / LastOrDefault:
Këta operator marrin predikate për të funksionuar. Operatori First kthen elementin e parë për të cilin predikati shënon true, apo nëse asnjë element nuk i përgjigjet predikatit hedh gabim (exception). Operatori FirstOrDefault është i ngjashëm me operatorin First vetëm se kthen vlerën e nënkuptuar të tipit (zakonisht referenca null) në rast se predikatit nuk i përshtatet asnje element. Operatori Last, kthen elementin e fundit që i përgjigjet predikatit nga koleksioni dhe LastOrDefault kthen vlerën e nënkuptuar nëse asnjë element nuk i përshtatet kërkesës.

;Single:
Operatori Single pranon një predikat dhe kthen elementet që i përshtaten kërkesës së atij predikati. Në rast se asnjë ose më shumë elemente i përgjigjen atëherë hedhet një gabim (exception).

;SingleOrDefault:
Kryen veprimin e njejtë sikur Single, përveq që kthen vlerën e nënkuptuar nëse asnjë element nuk i përgjigjet predikatit.

;ElementAt:
Operatori ElementAt kthen elementin në indeksin e dhënë.

;Any / All / Contains:
Operatori Any shqyrton nëse ka elemente në koleksion që i përgjigjen predikatit të shenuar. Ky nuk e selekton elementin por kthen True nesë së paku një element i përgjigjet predikatit. Operatori All kthen True në rast se të gjitha elementet i përgjigjen predikatit. Operatori. Contains shqyrton nëse koleksioni e përmban një element të dhënë.

;Count:
Operatori Count kthen numrin e elementeve të dhëna në koleksion.
## Referime