Forespørgselssyntaks:
Lad os se på den generiske syntaks:
fra iterator i DatakildeVælg iterator ;
Her:
- Data_Source kan være den liste, der indeholder dataene.
- Iteratoren bruges til at hente elementerne fra Data_Source.
Datakilde
I hele denne vejledning vil vi bruge følgende liste over poster som en datakilde, og alle forespørgsler anvendes kun på denne datakilde. Sørg for, at du kører denne kode i dit miljø, og modificer forespørgselssætningerne med følgende eksempler én efter én, som vi skal diskutere:
ved brug af System ;
ved brug af System.Collectioner.Generisk ;
ved brug af System.Linq ;
ved brug af System.Samlinger ;
offentlig klasse Beregninger
{
offentlig statisk ugyldig Hoved ( )
{
// Oprettelse af liste
Liste lande_priser = ny Liste ( ) {
// Tilføj 5 poster til listen
ny Priser ( ) { vare = 'Frugter' ,Beliggenhed = 'USA' , antal = 100 , omkostninger = 345,78 } ,
ny Priser ( ) { vare = 'Nødder' ,Beliggenhed = 'Indien' , antal = 200 , omkostninger = 3645,78 } ,
ny Priser ( ) { vare = 'Andre' ,Beliggenhed = 'UK' , antal = 500 , omkostninger = 90,68 } ,
ny Priser ( ) { vare = 'olie' ,Beliggenhed = 'USA' , antal = 100 , omkostninger = 345,78 } ,
ny Priser ( ) { vare = 'Chili' ,Beliggenhed = 'USA' , antal = 10 , omkostninger = 67,89 } ,
} ;
for hver ( var jeg i lande_priser )
{
Konsol . WriteLine ( jeg . vare + ' ' + jeg . Beliggenhed + ' ' + jeg . antal + ' ' + jeg . koste ) ;
}
}
}
offentlig klasse Priser {
offentlig snor vare { få ; sæt ; }
offentlig snor Beliggenhed { få ; sæt ; }
offentlig int antal { få ; sæt ; }
offentlig dobbelt koste { få ; sæt ; }
}
Optegnelser:
Forklaring:
1. Opret priserne med følgende attributter:
2. Opret en anden klasse som er 'Beregninger' med hovedmetoden og opret country_prices listen med fem poster.
Vælg
Grundlæggende er 'select' en projektionsoperatør, som vælger attributterne fra den angivne datakilde. Forespørgslen starter med 'fra'. Derefter angiver vi iteratoren, der itererer over datakilden. Derefter angives 'vælg'-operatøren.
Syntaks:
Alle attributter: fra iterator i Data_Source vælg iterator;
Specifik egenskab: fra iterator i Data_Source vælg iterator.attribute;
Eksempel 1:
Lad os skrive en forespørgsel for at vælge alle posterne fra listen.
ved brug af System ;ved brug af System.Collectioner.Generisk ;
ved brug af System.Linq ;
ved brug af System.Samlinger ;
offentlig klasse Beregninger
{
offentlig statisk ugyldig Hoved ( )
{
// Oprettelse af liste
Liste lande_priser = ny Liste ( ) {
// Tilføj 5 poster til listen
ny Priser ( ) { vare = 'Frugter' ,Beliggenhed = 'USA' , antal = 100 , omkostninger = 345,78 } ,
ny Priser ( ) { vare = 'Nødder' ,Beliggenhed = 'Indien' , antal = 200 , omkostninger = 3645,78 } ,
ny Priser ( ) { vare = 'Andre' ,Beliggenhed = 'UK' , antal = 500 , omkostninger = 90,68 } ,
ny Priser ( ) { vare = 'olie' ,Beliggenhed = 'USA' , antal = 100 , omkostninger = 345,78 } ,
ny Priser ( ) { vare = 'Chili' ,Beliggenhed = 'USA' , antal = 10 , omkostninger = 67,89 } ,
} ;
//vælg operator i forespørgslen
var data = fra jeg i lande_priser
Vælg jeg ;
for hver ( var jeg i data )
{
Konsol . WriteLine ( jeg . vare + ' ' + jeg . Beliggenhed + ' ' + jeg . antal + ' ' + jeg . koste ) ;
}
}
}
offentlig klasse Priser {
offentlig snor vare { få ; sæt ; }
offentlig snor Beliggenhed { få ; sæt ; }
offentlig int antal { få ; sæt ; }
offentlig dobbelt koste { få ; sæt ; }
}
Produktion:
Her har vi ikke angivet nogen attribut i 'vælg'-forespørgslen. Vi hentede alle attributterne fra forespørgslen (data) inde i 'foreach'-løkken ved hjælp af iteratoren.
Eksempel 2:
Få nu varerne ved at angive vareattributten i 'vælg'-operatøren. Forespørgslen er ' fra i i lande_priser vælg i.vare ”.
//vælg operator for at få vareattribut i forespørgslenvar data = fra jeg i lande_priser
Vælg jeg . vare ;
for hver ( var jeg i data )
{
Konsol . WriteLine ( jeg ) ;
}
Produktion:
Linje # 21 – Linje # 29:
2. Hvor
Hvis du vil filtrere dataene ud fra nogle betingelser, kan du bruge 'where'-operatoren i forespørgslen sammen med 'select'-klausulen. Men 'hvor'-operatoren bruges først, og derefter angives select-operatoren.
Syntaks:
Lad os se, hvordan du bruger 'hvor'-operatoren i LINQ-forespørgslen.
fra iterator i Datakildehvor tilstand / s
Vælg iterator . attribut ;
Eksempel 1: Enkelt tilstand
Lad os filtrere registreringerne ud fra vareattributten. Brug operatoren lig med (==) i 'hvor'-operatoren som en betingelse, og sammenlign iteratoren med 'Chilier'. Så de poster, der er relateret til 'Chillies' er valgt.
Forespørgslen er ' fra i i lande_priser
hvor i.item == “Chili”
vælg i'
var data = fra jeg i lande_priser
hvor jeg . vare == 'Chili'
Vælg jeg ;
for hver ( var jeg i data )
{
Konsol . WriteLine ( jeg . vare + ' ' + jeg . Beliggenhed + ' ' + jeg . antal + ' ' + jeg . koste ) ;
}
Produktion:
Der er kun én plade med 'Chillies'-elementet.
Linje # 21 – Linje # 30:
Eksempel 2: Flere betingelser
Lad os filtrere posterne baseret på placerings- og mængdeattributterne. Mængden skal være større end 50 og mindre end 300. Placeringen skal være 'USA'.
Forespørgslen er ' fra i i lande_priser
hvor i.mængde > 50
hvor i.mængde < 300
hvor i.location == 'USA'
vælg i'
var data = fra jeg i lande_priser
hvor jeg . antal > halvtreds
hvor jeg . antal < 300
hvor jeg . Beliggenhed == 'USA'
Vælg jeg ;
for hver ( var jeg i data )
{
Konsol . WriteLine ( jeg . vare + ' ' + jeg . Beliggenhed + ' ' + jeg . antal + ' ' + jeg . koste ) ;
}
Produktion:
Der er to rekorder, der matchede de tidligere betingelser.
Linje # 21 – Linje # 32:
Eksempel 3: Og (&&) operatør
Vi kan angive 'og (&&)'-operatoren for at angive flere betingelser ad gangen. Hvis alle betingelserne er sande, returneres de poster, der opfylder alle betingelserne, af forespørgslen.
I dette eksempel vælger vi posterne, hvis mængden er større end 20, og prisen er 67,89.
Forespørgslen er ' fra i i lande_priser
hvor i.mængde < 20 && i.cost == 67,89
vælg i'
hvor jeg . antal < tyve && jeg . koste == 67,89
Vælg jeg ;
for hver ( var jeg i data )
{
Konsol . WriteLine ( jeg . vare + ' ' + jeg . Beliggenhed + ' ' + jeg . antal + ' ' + jeg . koste ) ;
}
Produktion:
Der er kun én post med en mængde, der er mindre end 20 og en pris på 67,89
Linje # 21 – Linje # 29:
Eksempel 4: Eller (||) Operatør
Operatoren 'eller (||)' bruges også til at angive flere betingelser ad gangen. Hvis mindst én betingelse er sand, returneres de poster, der opfylder denne betingelse.
I dette eksempel vælger vi posterne, hvis mængden er større end 300, eller placeringen er 'Tokyo'.
Forespørgslen er ' fra i i lande_priser
hvor i.mængde > 300 || i.location == “Tokyo”
vælg i'
hvor jeg . antal > 300 || jeg . Beliggenhed == 'Tokyo'
Vælg jeg ;
for hver ( var jeg i data )
{
Konsol . WriteLine ( jeg . vare + ' ' + jeg . Beliggenhed + ' ' + jeg . antal + ' ' + jeg . koste ) ;
}
Produktion:
Der er kun én post med en mængde, der er større end 300 (den første betingelse matches).
Linje # 21 – Linje # 29:
3. Bestil efter
Hvis du vil arrangere de poster, der returneres af LINQ-forespørgslen, i stigende eller faldende rækkefølge baseret på værdier i en af attributterne, kan du bruge operatoren 'order by' i forespørgslen. Du skal angive denne operator før 'vælg' operatoren.
Syntaks:
Lad os se, hvordan du bruger 'order efter'-operatoren i LINQ-forespørgslen.
Stigende rækkefølge:
fra iterator i Datakildebestille ved iterator . attribut stigende
Vælg iterator ;
Faldende rækkefølge:
fra iterator i Datakildebestille ved iterator . attribut aftagende
Vælg iterator ;
Eksempel 1: Stigende rækkefølge
Vælg alle attributterne fra datakilden (listen) og returner dem i stigende rækkefølge baseret på værdierne i quantity-attributten.
Forespørgslen er ' fra i i lande_priser
orden efter i.mængde stigende
vælg i'
bestilling af i . antal stigende
Vælg jeg ;
for hver ( var jeg i data )
{
Konsol . WriteLine ( jeg . vare + ' ' + jeg . Beliggenhed + ' ' + jeg . antal + ' ' + jeg . koste ) ;
}
Produktion:
Linje # 21 – Linje # 29:
Eksempel 2: Faldende rækkefølge
Vælg alle attributterne fra datakilden (listen), og returner dem i faldende rækkefølge baseret på værdierne i omkostningsattributten.
Forespørgslen er ' fra i i lande_priser
bestil efter i.pris faldende
vælg i'
bestilling af i . koste aftagende
Vælg jeg ;
for hver ( var jeg i data )
{
Konsol . WriteLine ( jeg . vare + ' ' + jeg . Beliggenhed + ' ' + jeg . antal + ' ' + jeg . koste ) ;
}
Produktion:
Linje # 21 – Linje # 29:
4. Grænse
Limit i SQL begrænser de poster, der returneres af forespørgslen. Det returnerer de øverste poster, der returneres af forespørgslen. I LINQ kan vi opnå dette ved at bruge Skip() med Take()-operatoren. Take() får det angivne antal poster. Skip() bruges til at angive startregistreringsnummeret. På denne måde kan vi opnå 'limit'-funktionaliteten i LINQ.
Syntaks:
( fra iterator i DatakildeVælg iterator ) . Springe ( n ) . Tage ( n ) ;
- Skip() bruges til at springe posterne over og returnere de resterende poster. Det kræver et heltal, som angiver antallet af elementer, der skal springes over. I vores tilfælde er det 0.
- Take() bruges til at tage 'n' antal poster fra den første post.
Eksempel:
Vælg de første tre poster ud af fem poster, der returneres af forespørgslen.
Forespørgslen er ' (fra i i landepriser
vælg i).Skip(0).Take(3)'
Vælg jeg ) . Springe ( 0 ) . Tage ( 3 ) ;
for hver ( var jeg i data )
{
Konsol . WriteLine ( jeg . vare + ' ' + jeg . Beliggenhed + ' ' + jeg . antal + ' ' + jeg . koste ) ;
}
}
Produktion:
Linje # 21 – Linje # 28:
Konklusion
Vi lærte, hvordan man skriver forespørgslerne i C# LINQ, som ligner SQL. Som en del af denne vejledning diskuterede vi, hvordan man bruger 'vælg'-operatoren til at vælge posterne fra datakilden. For at filtrere de poster, der returneres af forespørgslen, brugte vi 'hvor'-operatoren ved at specificere betingelserne. Derefter lærte vi, hvordan man sorterer de poster, der returneres af forespørgslen, med 'ordre by'-operatoren. Til sidst, for at begrænse registreringerne, brugte vi operatørerne Skip() og Take().