Pisanje poizvedb v C# LINQ

Pisanje Poizvedb V C Linq



Podobno kot v SQL je mogoče v C# LINQ pisati poizvedbe s sintakso poizvedbe. Te poizvedbe se uporabljajo v aplikacijah baze podatkov C# v spletu za pridobivanje podatkov iz baze podatkov in prikaz v spletu uporabnikom tretjih oseb. V tem priročniku bomo razpravljali o nekaterih poizvedbah LINQ, ki so podobne SQL. Za to bomo ustvarili vir podatkov seznama in uporabili poizvedbe v njem.

Sintaksa poizvedbe:

Poglejmo generično sintakso:

od iterator v Vir podatkov
izberite iterator ;

Tukaj:







  1. Data_Source je lahko seznam, ki vsebuje podatke.
  2. 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 poizvedbi
je 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 podatkov
kje 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'

//izberite, kje želite filtrirati zapise
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'

//izberite, kje želite filtrirati zapise, tako da podate več pogojev
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'

je bil podatke = od jaz v države_cene
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'

je bil podatke = od jaz v države_cene
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 podatkov
naročilo avtor iterator . atribut naraščajoče
izberite iterator ;

Padajoči vrstni red:

od iterator v Vir podatkov
naroč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'

je bil podatke = od jaz v države_cene
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'

je bil podatke = od jaz v države_cene
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 podatkov
izberite iterator ) . Preskoči ( n ) . Vzemi ( n ) ;
  1. 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.
  2. 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)'

je bil podatke = ( od jaz v države_cene
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().