Užklausos sintaksė:
Pažvelkime į bendrąją sintaksę:
iš iteratorius in Duomenų šaltinispasirinkite iteratorius ;
Čia:
- Data_Source gali būti sąrašas, kuriame saugomi duomenys.
- 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š 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žklausojebuvo duomenis = iš 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“.
iš iteratorius in Duomenų šaltiniskur 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š'
buvo duomenis = iš 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š'
buvo duomenis = iš 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š'
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š'
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:
iš iteratorius in Duomenų šaltinisįsakymas pateikė iteratorius . atributas kylantis
pasirinkite iteratorius ;
Mažėjančia tvarka:
iš 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š'
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š'
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ė:
( iš iteratorius in Duomenų šaltinispasirinkite iteratorius ) . Praleisti ( n ) . Imk ( n ) ;
- 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.
- 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)'
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 ().