Sintaksa poizvedbe:
Poglejmo generično sintakso:
od iterator v Vir podatkovizberite iterator ;
Tukaj:
- Data_Source je lahko seznam, ki vsebuje podatke.
- Iterator se uporablja za pridobivanje elementov iz Data_Source.
Vir podatkov
V tem celotnem vodniku bomo uporabili naslednji seznam zapisov kot vir podatkov in vse poizvedbe se uporabljajo samo za ta vir podatkov. Prepričajte se, da zaženete to kodo v svojem okolju in spremenite stavke poizvedbe z naslednjimi primeri enega za drugim, o katerih bomo razpravljali:
uporabo Sistem ;
uporabo System.Collections.Generic ;
uporabo System.Linq ;
uporabo Sistem.Zbirke ;
javnosti razred Izračuni
{
javnosti statična praznina Glavni ( )
{
// Ustvarjanje seznama
Navedite države_cene = novo Seznam ( ) {
// Dodajte 5 zapisov na seznam
novo Cene ( ) { postavka = 'Sadje' ,lokacija = 'ZDA' , količina = 100 , stroški = 345,78 } ,
novo Cene ( ) { postavka = 'orehi' ,lokacija = 'Indija' , količina = 200 , stroški = 3645,78 } ,
novo Cene ( ) { postavka = 'Drugi' ,lokacija = 'UK' , količina = 500 , stroški = 90,68 } ,
novo Cene ( ) { postavka = 'olje' ,lokacija = 'ZDA' , količina = 100 , stroški = 345,78 } ,
novo Cene ( ) { postavka = 'Čiliji' ,lokacija = 'ZDA' , količina = 10 , stroški = 67,89 } ,
} ;
za vsakogar ( je bil jaz v države_cene )
{
Konzola . WriteLine ( jaz . postavka + ' ' + jaz . lokacijo + ' ' + jaz . količino + ' ' + jaz . stroški ) ;
}
}
}
javnosti razred Cene {
javnosti vrvica postavka { dobiti ; set ; }
javnosti vrvica lokacijo { dobiti ; set ; }
javnosti int količino { dobiti ; set ; }
javnosti dvojno stroški { dobiti ; set ; }
}
Zapisi:
Pojasnilo:
1. Ustvarite cene z naslednjimi atributi:
2. Ustvarite drug razred, ki je »Izračuni« z glavno metodo in ustvarite seznam country_prices s petimi zapisi.
Izberite
V bistvu je »select« operator projekcije, ki izbere atribute iz podanega vira podatkov. Poizvedba se začne z 'od'. Nato določimo iterator, ki ponavlja po izvoru podatkov. Nato je določen operator »izberi«.
Sintaksa:
Vsi atributi: iz iteratorja v Data_Source izberite iterator;
Poseben atribut: iz iteratorja v Data_Source izberite iterator.attribute;
Primer 1:
Napišimo poizvedbo za izbiro vseh zapisov s seznama.
uporabo Sistem ;uporabo System.Collections.Generic ;
uporabo System.Linq ;
uporabo Sistem.Zbirke ;
javnosti razred Izračuni
{
javnosti statična praznina Glavni ( )
{
// Ustvarjanje seznama
Navedite države_cene = novo Seznam ( ) {
// Dodajte 5 zapisov na seznam
novo Cene ( ) { postavka = 'Sadje' ,lokacija = 'ZDA' , količina = 100 , stroški = 345,78 } ,
novo Cene ( ) { postavka = 'orehi' ,lokacija = 'Indija' , količina = 200 , stroški = 3645,78 } ,
novo Cene ( ) { postavka = 'Drugi' ,lokacija = 'UK' , količina = 500 , stroški = 90,68 } ,
novo Cene ( ) { postavka = 'olje' ,lokacija = 'ZDA' , količina = 100 , stroški = 345,78 } ,
novo Cene ( ) { postavka = 'Čiliji' ,lokacija = 'ZDA' , količina = 10 , stroški = 67,89 } ,
} ;
//izberi operator v poizvedbi
je bil podatke = od jaz v države_cene
izberite jaz ;
za vsakogar ( je bil jaz v podatke )
{
Konzola . WriteLine ( jaz . postavka + ' ' + jaz . lokacijo + ' ' + jaz . količino + ' ' + jaz . stroški ) ;
}
}
}
javnosti razred Cene {
javnosti vrvica postavka { dobiti ; set ; }
javnosti vrvica lokacijo { dobiti ; set ; }
javnosti int količino { dobiti ; set ; }
javnosti dvojno stroški { dobiti ; set ; }
}
Izhod:
Tukaj nismo navedli nobenega atributa v poizvedbi »select«. Z iteratorjem smo pridobili vse atribute iz poizvedbe (podatke) znotraj zanke “foreach”.
Primer 2:
Zdaj pridobite elemente tako, da določite atribut predmeta v operatorju »select«. Poizvedba je ' od i v country_prices izberite i.item ”.
//izberite operator za pridobitev atributa postavke v poizvedbije bil podatke = od jaz v države_cene
izberite jaz . postavka ;
za vsakogar ( je bil jaz v podatke )
{
Konzola . WriteLine ( jaz ) ;
}
Izhod:
Vrstica št. 21 – vrstica št. 29:
2. Kje
Če želite podatke filtrirati na podlagi nekaterih pogojev, lahko v poizvedbi uporabite operator »kje« skupaj s klavzulo »izberi«. Toda najprej se uporabi operator 'kje', nato pa se določi operator izbire.
Sintaksa:
Poglejmo, kako uporabiti operator 'kje' znotraj poizvedbe LINQ.
od iterator v Vir podatkovkje stanje / s
izberite iterator . atribut ;
Primer 1: Samski pogoj
Filtrirajmo zapise glede na atribut predmeta. Uporabite operator enako (==) v operatorju »where« kot pogoj in primerjajte iterator s »Chillies«. Torej, izbrani so zapisi, ki so povezani s 'Chillies'.
Poizvedba je ' od i v country_prices
kjer je i.item == “Čiliji”
izberi jaz'
je bil podatke = od jaz v države_cene
kje jaz . postavka == 'Čiliji'
izberite jaz ;
za vsakogar ( je bil jaz v podatke )
{
Konzola . WriteLine ( jaz . postavka + ' ' + jaz . lokacijo + ' ' + jaz . količino + ' ' + jaz . stroški ) ;
}
Izhod:
Obstaja samo en zapis s postavko 'Chillies'.
Vrstica št. 21 – vrstica št. 30:
Primer 2: Več pogojev
Filtrirajmo zapise glede na atribute lokacije in količine. Količina mora biti večja od 50 in manjša od 300. Lokacija mora biti »ZDA«.
Poizvedba je ' od i v country_prices
kjer je i.količina > 50
kjer je i.količina < 300
kjer je i.location == “ZDA”
izberi jaz'
je bil podatke = od jaz v države_cene
kje jaz . količino > petdeset
kje jaz . količino < 300
kje jaz . lokacijo == 'ZDA'
izberite jaz ;
za vsakogar ( je bil jaz v podatke )
{
Konzola . WriteLine ( jaz . postavka + ' ' + jaz . lokacijo + ' ' + jaz . količino + ' ' + jaz . stroški ) ;
}
Izhod:
Obstajata dva zapisa, ki ustrezata prejšnjim pogojem.
Vrstica št. 21 – vrstica št. 32:
Primer 3: In (&&) operator
Določimo lahko operator »in (&&)«, da določimo več pogojev hkrati. Če so vsi pogoji izpolnjeni, poizvedba vrne zapise, ki izpolnjujejo vse pogoje.
V tem primeru izberemo zapise, če je količina večja od 20 in je strošek 67,89.
Poizvedba je ' od i v country_prices
kjer je i.količina < 20 && i.strošek == 67,89
izberi jaz'
kje jaz . količino < dvajset && jaz . stroški == 67,89
izberite jaz ;
za vsakogar ( je bil jaz v podatke )
{
Konzola . WriteLine ( jaz . postavka + ' ' + jaz . lokacijo + ' ' + jaz . količino + ' ' + jaz . stroški ) ;
}
Izhod:
Obstaja samo en zapis s količino, manjšo od 20 in ceno 67,89
Vrstica št. 21 – vrstica št. 29:
Primer 4: Ali (||) Operater
Operator »ali (||)« se uporablja tudi za določanje več pogojev hkrati. Če je vsaj en pogoj resničen, se vrnejo zapisi, ki izpolnjujejo ta pogoj.
V tem primeru izberemo zapise, če je količina večja od 300 ali je lokacija »Tokio«.
Poizvedba je ' od i v country_prices
kjer je i.količina > 300 || i.location == “Tokio”
izberi jaz'
kje jaz . količino > 300 || jaz . lokacijo == 'Tokio'
izberite jaz ;
za vsakogar ( je bil jaz v podatke )
{
Konzola . WriteLine ( jaz . postavka + ' ' + jaz . lokacijo + ' ' + jaz . količino + ' ' + jaz . stroški ) ;
}
Izhod:
Obstaja samo en zapis s količino, ki je večja od 300 (prvi pogoj je izpolnjen).
Vrstica št. 21 – vrstica št. 29:
3. Naroči do
Če želite razporediti zapise, ki jih vrne poizvedba LINQ, v naraščajočem ali padajočem vrstnem redu na podlagi vrednosti v katerem koli atributu, lahko v poizvedbi uporabite operator »vrsti po«. Ta operator morate podati pred operatorjem »select«.
Sintaksa:
Oglejmo si, kako uporabiti operator »vrsti po« znotraj poizvedbe LINQ.
Naraščajoči vrstni red:
od iterator v Vir podatkovnaročilo avtor iterator . atribut naraščajoče
izberite iterator ;
Padajoči vrstni red:
od iterator v Vir podatkovnaročilo avtor iterator . atribut padajoče
izberite iterator ;
Primer 1: Naraščajoči vrstni red
Izberite vse atribute iz vira podatkov (seznam) in jih vrnite v naraščajočem vrstnem redu glede na vrednosti v atributu količine.
Poizvedba je ' od i v country_prices
vrstni red po i. količina narašča
izberi jaz'
naročilo po i . količino naraščajoče
izberite jaz ;
za vsakogar ( je bil jaz v podatke )
{
Konzola . WriteLine ( jaz . postavka + ' ' + jaz . lokacijo + ' ' + jaz . količino + ' ' + jaz . stroški ) ;
}
Izhod:
Vrstica št. 21 – vrstica št. 29:
Primer 2: Padajoči vrstni red
Izberite vse atribute iz vira podatkov (seznam) in jih vrnite v padajočem vrstnem redu glede na vrednosti v atributu stroškov.
Poizvedba je ' od i v country_prices
orderby i.cost padajoče
izberi jaz'
naročilo po i . stroški padajoče
izberite jaz ;
za vsakogar ( je bil jaz v podatke )
{
Konzola . WriteLine ( jaz . postavka + ' ' + jaz . lokacijo + ' ' + jaz . količino + ' ' + jaz . stroški ) ;
}
Izhod:
Vrstica št. 21 – vrstica št. 29:
4. Omejitev
Omejitev v SQL omejuje zapise, ki jih vrne poizvedba. Vrne najvišje zapise, ki jih vrne poizvedba. V LINQ lahko to dosežemo z uporabo Skip() z operatorjem Take(). Take() pridobi določeno število zapisov. Skip() se uporablja za podajanje začetne številke zapisa. Na ta način lahko dosežemo 'omejitveno' funkcionalnost v LINQ.
Sintaksa:
( od iterator v Vir podatkovizberite iterator ) . Preskoči ( n ) . Vzemi ( n ) ;
- Skip() se uporablja za preskok zapisov in vrnitev preostalih zapisov. Potrebuje celo število, ki določa število elementov, ki jih je treba preskočiti. V našem primeru je 0.
- Take() se uporablja za prevzem 'n' števila zapisov iz prvega zapisa.
primer:
Izberite prve tri zapise od petih zapisov, ki jih vrne poizvedba.
Poizvedba je ' (od i v country_prices
izberite i).Preskoči(0).Vzemi(3)'
izberite jaz ) . Preskoči ( 0 ) . Vzemi ( 3 ) ;
za vsakogar ( je bil jaz v podatke )
{
Konzola . WriteLine ( jaz . postavka + ' ' + jaz . lokacijo + ' ' + jaz . količino + ' ' + jaz . stroški ) ;
}
}
Izhod:
Vrstica št. 21 – vrstica št. 28:
Zaključek
Naučili smo se pisati poizvedbe v C# LINQ, ki je podoben SQL. Kot del te vadnice smo razpravljali o tem, kako uporabiti operator »select« za izbiro zapisov iz vira podatkov. Za filtriranje zapisov, ki jih vrne poizvedba, smo s podajanjem pogojev uporabili operator »kje«. Nato smo se naučili razvrstiti zapise, ki jih vrne poizvedba, z operatorjem »vrsti po«. Nazadnje smo za omejitev zapisov uporabili operaterja Skip() in Take().