# Pyetësori i integruar në gjuhë programuese

| Language Integrated Query |
| --- |
| Designed by | Microsoft Corporation |
| Developer | Microsoft Corporation |
| OS | Microsoft Windows |
| Website | docs.microsoft.com/en-us/dotnet/standard/using-linq |
| Major implementations |
| .NET gjuhët (C#, F#, VB.NET) |
| Influenced by |
| SQL, Haskell |

**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