Skrive forespørgsler i C# LINQ

Skrive Foresporgsler I C Linq



I lighed med SQL er det muligt at skrive forespørgsler i C# LINQ ved hjælp af forespørgselssyntaksen. Disse forespørgsler bruges i C#-databaseapplikationer på nettet til at hente data fra databasen og vise dem på nettet til tredjepartsbrugere. I denne vejledning vil vi diskutere nogle LINQ-forespørgsler, der ligner SQL. Til dette vil vi oprette en listedatakilde og anvende forespørgslerne i den.

Forespørgselssyntaks:

Lad os se på den generiske syntaks:

fra iterator i Datakilde
Vælg iterator ;

Her:







  1. Data_Source kan være den liste, der indeholder dataene.
  2. 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 { ; sæt ; }
offentlig snor Beliggenhed { ; sæt ; }
offentlig int antal { ; sæt ; }
offentlig dobbelt koste { ; 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 { ; sæt ; }
offentlig snor Beliggenhed { ; sæt ; }
offentlig int antal { ; sæt ; }
offentlig dobbelt koste { ; 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ørgslen
var 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 Datakilde
hvor 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'

//vælg med, hvor poster skal filtreres
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'

//vælg med hvor der skal filtreres poster ved at angive flere betingelser
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'

var data = fra jeg i lande_priser
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'

var data = fra jeg i lande_priser
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 Datakilde
bestille ved iterator . attribut stigende
Vælg iterator ;

Faldende rækkefølge:

fra iterator i Datakilde
bestille 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'

var data = fra jeg i lande_priser
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'

var data = fra jeg i lande_priser
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 Datakilde
Vælg iterator ) . Springe ( n ) . Tage ( n ) ;
  1. 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.
  2. 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)'

var data = ( fra jeg i lande_priser
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().