Užklausų rašymas C# LINQ

Uzklausu Rasymas C Linq



Panašiai kaip SQL, C# LINQ galima rašyti užklausas naudojant užklausos sintaksę. Šios užklausos naudojamos C# duomenų bazės programose žiniatinklyje, siekiant gauti duomenis iš duomenų bazės ir pateikti žiniatinklyje trečiųjų šalių vartotojams. Šiame vadove aptarsime kai kurias LINQ užklausas, panašias į SQL. Tam sukursime sąrašo duomenų šaltinį ir jame pritaikysime užklausas.

Užklausos sintaksė:

Pažvelkime į bendrąją sintaksę:

iteratorius in Duomenų šaltinis
pasirinkite iteratorius ;

Čia:







  1. Data_Source gali būti sąrašas, kuriame saugomi duomenys.
  2. Iteratorius naudojamas elementams gauti iš duomenų_šaltinio.

Duomenų šaltinis

Šiame visame vadove kaip duomenų šaltinį naudosime šį įrašų sąrašą ir visos užklausos taikomos tik šiam duomenų šaltiniui. Įsitikinkite, kad paleidote šį kodą savo aplinkoje ir vieną po kito modifikuokite užklausos teiginius su šiais pavyzdžiais, kuriuos aptarsime:



naudojant Sistema ;
naudojant Sistema.Kolekcijos.Bendra ;
naudojant Sistema.Linq ;
naudojant Sistema.Kolekcijos ;

viešas klasė Skaičiavimai
{
viešas statinis tuštuma Pagrindinis ( )
{
// Sąrašo kūrimas
Pateikite šalies_kainų sąrašą = naujas Sąrašas ( ) {

// Pridėti 5 įrašus į sąrašą
naujas Kainos ( ) { daiktas = 'Vaisiai' , vieta = 'JAV' , kiekis = 100 , kaina = 345,78 } ,
naujas Kainos ( ) { daiktas = 'Riešutai' , vieta = 'Indija' , kiekis = 200 , kaina = 3645,78 } ,
naujas Kainos ( ) { daiktas = 'Kiti' , vieta = 'UK' , kiekis = 500 , kaina = 90,68 } ,
naujas Kainos ( ) { daiktas = 'Alyva' , vieta = 'JAV' , kiekis = 100 , kaina = 345,78 } ,
naujas Kainos ( ) { daiktas = 'Aitriosios paprikos' , vieta = 'JAV' , kiekis = 10 , kaina = 67,89 } ,
} ;


kiekvienam ( buvo i in šalies_kainos )
{
Konsolė . WriteLine ( i . daiktas + ' ' + i . vieta + ' ' + i . kiekis + ' ' + i . kaina ) ;
}
}
}
viešas klasė Kainos {
viešas styga daiktas { gauti ; rinkinys ; }
viešas styga vieta { gauti ; rinkinys ; }
viešas tarpt kiekis { gauti ; rinkinys ; }
viešas dvigubai kaina { gauti ; rinkinys ; }
}

Įrašai:







Paaiškinimas:

1. Sukurkite kainas naudodami šiuos atributus:

2. Sukurkite kitą klasę, kuri yra „Skaičiavimai“ pagrindiniu metodu ir sukurkite country_prices sąrašą su penkiais įrašais.



Pasirinkite

Iš esmės „select“ yra projekcijos operatorius, parenkantis atributus iš nurodyto duomenų šaltinio. Užklausa prasideda „nuo“. Tada nurodome iteratorių, kuris kartojasi per duomenų šaltinį. Tada nurodomas operatorius „select“.

Sintaksė:

Visi atributai: iš iteratoriaus duomenų_šaltinyje pasirinkite iteratorių;

Konkretus atributas: iš iteratoriaus duomenų_šaltinyje pasirinkite iterator.attribute;

1 pavyzdys:

Parašykime užklausą, kad pasirinktume visus įrašus iš sąrašo.

naudojant Sistema ;
naudojant Sistema.Kolekcijos.Bendra ;
naudojant Sistema.Linq ;
naudojant Sistema.Kolekcijos ;

viešas klasė Skaičiavimai
{
viešas statinis tuštuma Pagrindinis ( )
{
// Sąrašo kūrimas
Pateikite šalies_kainų sąrašą = naujas Sąrašas ( ) {

// Pridėti 5 įrašus į sąrašą
naujas Kainos ( ) { daiktas = 'Vaisiai' , vieta = 'JAV' , kiekis = 100 , kaina = 345,78 } ,
naujas Kainos ( ) { daiktas = 'Riešutai' , vieta = 'Indija' , kiekis = 200 , kaina = 3645,78 } ,
naujas Kainos ( ) { daiktas = 'Kiti' , vieta = 'UK' , kiekis = 500 , kaina = 90,68 } ,
naujas Kainos ( ) { daiktas = 'Alyva' , vieta = 'JAV' , kiekis = 100 , kaina = 345,78 } ,
naujas Kainos ( ) { daiktas = 'Aitriosios paprikos' , vieta = 'JAV' , kiekis = 10 , kaina = 67,89 } ,
} ;

//užklausoje pasirinkite operatorių
buvo duomenis = i in šalies_kainos
pasirinkite i ;

kiekvienam ( buvo i in duomenis )
{
Konsolė . WriteLine ( i . daiktas + ' ' + i . vieta + ' ' + i . kiekis + ' ' + i . kaina ) ;

}
}
}
viešas klasė Kainos {
viešas styga daiktas { gauti ; rinkinys ; }
viešas styga vieta { gauti ; rinkinys ; }
viešas tarpt kiekis { gauti ; rinkinys ; }
viešas dvigubai kaina { gauti ; rinkinys ; }
}

Išvestis:

Čia mes nenurodėme jokio atributo „select“ užklausoje. Mes gavome visus atributus iš užklausos (duomenų) „foreach“ ciklo viduje, naudodami iteratorių.

2 pavyzdys:

Dabar gaukite elementus nurodydami elemento atributą operatoriuje „select“. Užklausa yra “ iš i šalies_kainose pasirinkite i.prekė “.

//pasirinkite operatorių, kad gautumėte elemento atributą užklausoje
buvo duomenis = i in šalies_kainos
pasirinkite i . daiktas ;

kiekvienam ( buvo i in duomenis )
{
Konsolė . WriteLine ( i ) ;

}

Išvestis:

21 eilutė – 29 eilutė:

2. Kur

Jei norite filtruoti duomenis pagal kai kurias sąlygas (-as), užklausoje galite naudoti operatorių „kur“ kartu su sąlyga „select“. Bet pirmiausia naudojamas operatorius „kur“, o tada nurodomas operatorius „select“.

Sintaksė:

Pažiūrėkime, kaip LINQ užklausoje naudoti operatorių „kur“.

iteratorius in Duomenų šaltinis
kur sąlyga / s
pasirinkite iteratorius . atributas ;

1 pavyzdys: Vienkartinė būklė

Filtruokime įrašus pagal prekės atributą. Naudokite lygų (==) operatorių operatoriuje „kur“ kaip sąlygą ir palyginkite iteratorių su „Chillies“. Taigi, atrenkami įrašai, susiję su „čili“.

Klausimas yra ' nuo i šalies_kainomis
kur i.item == „apipiriukai“
pasirinkite aš'

//pasirinkite, kur filtruoti įrašus
buvo duomenis = i in šalies_kainos
kur i . daiktas == 'Aitriosios paprikos'
pasirinkite i ;

kiekvienam ( buvo i in duomenis )
{
Konsolė . WriteLine ( i . daiktas + ' ' + i . vieta + ' ' + i . kiekis + ' ' + i . kaina ) ;

}

Išvestis:

Yra tik vienas įrašas su elementu „Chillies“.

21 eilutė – 30 eilutė:

2 pavyzdys: Kelios sąlygos

Filtruokime įrašus pagal vietos ir kiekio atributus. Kiekis turi būti didesnis nei 50 ir mažesnis nei 300. Vieta turi būti „JAV“.

Klausimas yra ' nuo i šalies_kainomis
kur i.kiekis > 50
kur i.kiekis < 300
kur i.location == 'JAV'
pasirinkite aš'

//pasirinkite, kur filtruoti įrašus, nurodydami kelias sąlygas
buvo duomenis = i in šalies_kainos
kur i . kiekis > penkiasdešimt
kur i . kiekis < 300
kur i . vieta == 'JAV'
pasirinkite i ;

kiekvienam ( buvo i in duomenis )
{
Konsolė . WriteLine ( i . daiktas + ' ' + i . vieta + ' ' + i . kiekis + ' ' + i . kaina ) ;

}

Išvestis:

Yra du įrašai, kurie atitiko ankstesnes sąlygas.

21 eilutė – 32 eilutė:

3 pavyzdys: Ir (&&) operatorius

Galime nurodyti operatorių „ir (&&)“, kad vienu metu nurodytume kelias sąlygas. Jei visos sąlygos yra teisingos, užklausa grąžina visas sąlygas atitinkančius įrašus.

Šiame pavyzdyje įrašus pasirenkame, jei kiekis didesnis nei 20, o kaina yra 67,89.

Klausimas yra ' nuo i šalies_kainomis
kur i.kiekis < 20 && i.kaina == 67,89
pasirinkite aš'

buvo duomenis = i in šalies_kainos
kur i . kiekis < dvidešimt && i . kaina == 67,89
pasirinkite i ;

kiekvienam ( buvo i in duomenis )
{
Konsolė . WriteLine ( i . daiktas + ' ' + i . vieta + ' ' + i . kiekis + ' ' + i . kaina ) ;

}

Išvestis:

Yra tik vienas įrašas, kurio kiekis yra mažesnis nei 20, o kaina yra 67,89

21 eilutė – 29 eilutė:

4 pavyzdys: Arba (||) operatorius

Operatorius „arba (||)“ taip pat naudojamas kelioms sąlygoms vienu metu nurodyti. Jei bent viena sąlyga yra teisinga, tą sąlygą atitinkantys įrašai grąžinami.

Šiame pavyzdyje įrašus pasirenkame, jei kiekis didesnis nei 300 arba vieta yra „Tokijas“.

Klausimas yra ' nuo i šalies_kainomis
kur i.kiekis > 300 || i.location == 'Tokijas'
pasirinkite aš'

buvo duomenis = i in šalies_kainos
kur i . kiekis > 300 || i . vieta == 'Tokijas'
pasirinkite i ;

kiekvienam ( buvo i in duomenis )
{
Konsolė . WriteLine ( i . daiktas + ' ' + i . vieta + ' ' + i . kiekis + ' ' + i . kaina ) ;

}

Išvestis:

Yra tik vienas įrašas, kurio kiekis yra didesnis nei 300 (atitinka pirmoji sąlyga).

21 eilutė – 29 eilutė:

3. Užsakyti iki

Jei norite sutvarkyti įrašus, kuriuos grąžina LINQ užklausa, didėjimo arba mažėjimo tvarka pagal bet kurio atributo reikšmes, užklausoje galite naudoti operatorių „tvarka pagal“. Prieš operatorių „select“ turite nurodyti šį operatorių.

Sintaksė:

Pažiūrėkime, kaip LINQ užklausoje naudoti operatorių „užsakymas pagal“.

Didėjančia tvarka:

iteratorius in Duomenų šaltinis
įsakymas pateikė iteratorius . atributas kylantis
pasirinkite iteratorius ;

Mažėjančia tvarka:

iteratorius in Duomenų šaltinis
įsakymas pateikė iteratorius . atributas nusileidžiantis
pasirinkite iteratorius ;

1 pavyzdys: Didėjančia tvarka

Pasirinkite visus atributus iš duomenų šaltinio (sąrašo) ir grąžinkite juos didėjančia tvarka, atsižvelgiant į atributo Kiekis reikšmes.

Klausimas yra ' nuo i šalies_kainomis
tvarka pagal i.kiekis didėjančia tvarka
pasirinkite aš'

buvo duomenis = i in šalies_kainos
užsakyti pagal i . kiekis kylantis
pasirinkite i ;

kiekvienam ( buvo i in duomenis )
{
Konsolė . WriteLine ( i . daiktas + ' ' + i . vieta + ' ' + i . kiekis + ' ' + i . kaina ) ;

}

Išvestis:

21 eilutė – 29 eilutė:

2 pavyzdys: Mažėjančia tvarka

Pasirinkite visus atributus iš duomenų šaltinio (sąrašo) ir grąžinkite juos mažėjančia tvarka pagal kainos atributo reikšmes.

Klausimas yra ' nuo i šalies_kainomis
orderby i.cost mažėjančia tvarka
pasirinkite aš'

buvo duomenis = i in šalies_kainos
užsakyti pagal i . kaina nusileidžiantis
pasirinkite i ;

kiekvienam ( buvo i in duomenis )
{
Konsolė . WriteLine ( i . daiktas + ' ' + i . vieta + ' ' + i . kiekis + ' ' + i . kaina ) ;

}

Išvestis:

21 eilutė – 29 eilutė:

4. Riba

SQL apribojimas riboja įrašus, kuriuos grąžina užklausa. Jis grąžina geriausius įrašus, kuriuos grąžina užklausa. LINQ tai galime pasiekti naudodami Skip() su operatoriumi Take(). Take() gauna nurodytą įrašų skaičių. Skip() naudojamas pradiniam įrašo numeriui nurodyti. Tokiu būdu galime pasiekti „ribinę“ LINQ funkciją.

Sintaksė:

( iteratorius in Duomenų šaltinis
pasirinkite iteratorius ) . Praleisti ( n ) . Imk ( n ) ;
  1. Skip() naudojamas įrašams praleisti ir likusiems įrašams grąžinti. Tam reikia sveikojo skaičiaus, kuris nurodo elementų, kuriuos reikia praleisti, skaičių. Mūsų atveju tai yra 0.
  2. Take() naudojamas norint paimti „n“ įrašų skaičių iš pirmojo įrašo.

Pavyzdys:

Pasirinkite pirmuosius tris įrašus iš penkių įrašų, kuriuos grąžina užklausa.

Klausimas yra ' (nuo i šalies_kainomis
pasirinkite i).Praleisti (0). Imti (3)'

buvo duomenis = ( i in šalies_kainos
pasirinkite i ) . Praleisti ( 0 ) . Imk ( 3 ) ;

kiekvienam ( buvo i in duomenis )
{
Konsolė . WriteLine ( i . daiktas + ' ' + i . vieta + ' ' + i . kiekis + ' ' + i . kaina ) ;

}

}

Išvestis:

21 eilutė – 28 eilutė:

Išvada

Sužinojome, kaip rašyti užklausas C# LINQ, kuri panaši į SQL. Vykdydami šią mokymo programą aptarėme, kaip naudoti operatorių „select“, kad būtų galima pasirinkti įrašus iš duomenų šaltinio. Norėdami filtruoti įrašus, kuriuos grąžina užklausa, nurodydami sąlygas naudojome operatorių „kur“. Tada sužinojome, kaip rūšiuoti įrašus, kuriuos grąžina užklausa naudojant operatorių „tvarka pagal“. Galiausiai, norėdami apriboti įrašus, panaudojome operatorius Skip () ir Take ().