Vaicājumu rakstīšana programmā C# LINQ

Vaicajumu Rakstisana Programma C Linq



Līdzīgi kā SQL, ir iespējams rakstīt vaicājumus C# LINQ, izmantojot vaicājuma sintaksi. Šie vaicājumi tiek izmantoti C# datu bāzes lietojumprogrammās tīmeklī, lai iegūtu datus no datu bāzes un parādītu tīmeklī trešo pušu lietotājiem. Šajā rokasgrāmatā mēs apspriedīsim dažus LINQ vaicājumus, kas ir līdzīgi SQL. Šim nolūkam mēs izveidosim saraksta datu avotu un izmantosim tajā esošos vaicājumus.

Vaicājuma sintakse:

Apskatīsim vispārējo sintaksi:

no iterators iekšā Datu avots
izvēlieties iterators ;

Šeit:







  1. Datu_avots var būt saraksts, kurā ir dati.
  2. Iterators tiek izmantots, lai izgūtu elementus no datu_avota.

Datu avots

Visā šajā rokasgrāmatā mēs izmantosim tālāk norādīto ierakstu sarakstu kā datu avotu, un visi vaicājumi tiks lietoti tikai šim datu avotam. Pārliecinieties, ka palaižat šo kodu savā vidē un pa vienam modificējiet vaicājuma paziņojumus, izmantojot tālāk norādītos piemērus, kurus mēs apspriedīsim:



izmantojot Sistēma ;
izmantojot Sistēma.Kolekcijas.Vispārīgi ;
izmantojot System.Linq ;
izmantojot Sistēma.Kolekcijas ;

publiski klasē Aprēķini
{
publiski statisks nederīgs Galvenā ( )
{
// Saraksta izveide
Norādiet valsts_cenas = jauns Saraksts ( ) {

// Pievienojiet sarakstam 5 ierakstus
jauns Cenas ( ) { lieta = 'augļi' , atrašanās vieta = 'ASV' , daudzums = 100 , izmaksas = 345,78 } ,
jauns Cenas ( ) { lieta = 'Rieksti' , atrašanās vieta = 'Indija' , daudzums = 200 , izmaksas = 3645,78 } ,
jauns Cenas ( ) { lieta = 'Citi' , atrašanās vieta = 'UK' , daudzums = 500 , izmaksas = 90.68 } ,
jauns Cenas ( ) { lieta = 'eļļa' , atrašanās vieta = 'ASV' , daudzums = 100 , izmaksas = 345,78 } ,
jauns Cenas ( ) { lieta = 'Čilli' , atrašanās vieta = 'ASV' , daudzums = 10 , izmaksas = 67.89 } ,
} ;


katram ( bija i iekšā valsts_cenas )
{
Konsole . WriteLine ( i . lieta + ' ' + i . atrašanās vieta + ' ' + i . daudzums + ' ' + i . izmaksas ) ;
}
}
}
publiski klasē Cenas {
publiski virkne lieta { gūt ; komplekts ; }
publiski virkne atrašanās vieta { gūt ; komplekts ; }
publiski starpt daudzums { gūt ; komplekts ; }
publiski dubultā izmaksas { gūt ; komplekts ; }
}

Ieraksti:







Paskaidrojums:

1. Izveidojiet cenas ar šādiem atribūtiem:

2. Izveidojiet citu klasi, kas ir “Aprēķini” ar galveno metodi, un izveidojiet sarakstu country_prices ar pieciem ierakstiem.



Izvēlieties

Būtībā “select” ir projekcijas operators, kas atlasa atribūtus no norādītā datu avota. Vaicājums sākas ar “no”. Pēc tam mēs norādām iteratoru, kas atkārtojas pa datu avotu. Pēc tam tiek norādīts operators “select”.

Sintakse:

Visi atribūti: no iteratora sadaļā Data_Source atlasiet iteratoru;

Konkrēts atribūts: no iteratora sadaļā Data_Source atlasiet iterator.attribute;

1. piemērs:

Uzrakstīsim vaicājumu, lai atlasītu visus ierakstus no saraksta.

izmantojot Sistēma ;
izmantojot Sistēma.Kolekcijas.Vispārīgi ;
izmantojot System.Linq ;
izmantojot Sistēma.Kolekcijas ;

publiski klasē Aprēķini
{
publiski statisks nederīgs Galvenā ( )
{
// Saraksta izveide
Norādiet valsts_cenas = jauns Saraksts ( ) {

// Pievienojiet sarakstam 5 ierakstus
jauns Cenas ( ) { lieta = 'augļi' , atrašanās vieta = 'ASV' , daudzums = 100 , izmaksas = 345,78 } ,
jauns Cenas ( ) { lieta = 'Rieksti' , atrašanās vieta = 'Indija' , daudzums = 200 , izmaksas = 3645,78 } ,
jauns Cenas ( ) { lieta = 'Citi' , atrašanās vieta = 'UK' , daudzums = 500 , izmaksas = 90.68 } ,
jauns Cenas ( ) { lieta = 'eļļa' , atrašanās vieta = 'ASV' , daudzums = 100 , izmaksas = 345,78 } ,
jauns Cenas ( ) { lieta = 'Čilli' , atrašanās vieta = 'ASV' , daudzums = 10 , izmaksas = 67.89 } ,
} ;

//vaicājumā atlasiet operatoru
bija datus = no i iekšā valsts_cenas
izvēlieties i ;

katram ( bija i iekšā datus )
{
Konsole . WriteLine ( i . lieta + ' ' + i . atrašanās vieta + ' ' + i . daudzums + ' ' + i . izmaksas ) ;

}
}
}
publiski klasē Cenas {
publiski virkne lieta { gūt ; komplekts ; }
publiski virkne atrašanās vieta { gūt ; komplekts ; }
publiski starpt daudzums { gūt ; komplekts ; }
publiski dubultā izmaksas { gūt ; komplekts ; }
}

Izvade:

Šeit mēs nenorādījām nevienu atribūtu vaicājumā “atlasīt”. Mēs ieguvām visus atribūtus no vaicājuma (datiem) cilpas “foreach” iekšpusē, izmantojot iteratoru.

2. piemērs:

Tagad iegūstiet vienumus, operatorā “select” norādot vienuma atribūtu. Vaicājums ir  ' no i sadaļā country_prices atlasiet i.item ”.

//izvēlieties operatoru, lai vaicājumā iegūtu vienuma atribūtu
bija datus = no i iekšā valsts_cenas
atlasiet i . lieta ;

katram ( bija i iekšā datus )
{
Konsole . WriteLine ( i ) ;

}

Izvade:

21. rindiņa – 29. rindiņa:

2. Kur

Ja vēlaties filtrēt datus, pamatojoties uz dažiem nosacījumiem/-iem, vaicājumā varat izmantot operatoru “kur” kopā ar klauzulu “select”. Bet vispirms tiek izmantots operators “kur” un pēc tam tiek norādīts atlases operators.

Sintakse:

Apskatīsim, kā LINQ vaicājumā izmantot operatoru “kur”.

no iterators iekšā Datu avots
kur stāvokli / s
atlasiet iterators . atribūts ;

1. piemērs: Vienreizējs stāvoklis

Filtrēsim ierakstus, pamatojoties uz vienuma atribūtu. Izmantojiet operatoru vienāds ar (==) operatorā “kur” kā nosacījumu un salīdziniet iteratoru ar “Chillies”. Tātad tiek atlasīti ieraksti, kas saistīti ar “Čilli”.

Vaicājums ir ' no i valsts_cenās
kur i.item == “Čilli”
izvēlieties es'

//atlasiet, kur filtrēt ierakstus
bija datus = no i iekšā valsts_cenas
kur i . lieta == 'Čilli'
atlasiet i ;

katram ( bija i iekšā datus )
{
Konsole . WriteLine ( i . lieta + ' ' + i . atrašanās vieta + ' ' + i . daudzums + ' ' + i . izmaksas ) ;

}

Izvade:

Ir tikai viens ieraksts ar vienumu “Čilli”.

21. rindiņa – 30. rindiņa:

2. piemērs: Vairāki nosacījumi

Filtrēsim ierakstus, pamatojoties uz atrašanās vietas un daudzuma atribūtiem. Daudzumam ir jābūt lielākam par 50 un mazākam par 300. Atrašanās vietai jābūt “ASV”.

Vaicājums ir ' no i valsts_cenās
kur i.quantity > 50
kur i.daudzums <300
kur i.location == “ASV”
izvēlieties es'

//atlasiet, kur filtrēt ierakstus, norādot vairākus nosacījumus
bija datus = no i iekšā valsts_cenas
kur i . daudzums > piecdesmit
kur i . daudzums < 300
kur i . atrašanās vieta == 'ASV'
atlasiet i ;

katram ( bija i iekšā datus )
{
Konsole . WriteLine ( i . lieta + ' ' + i . atrašanās vieta + ' ' + i . daudzums + ' ' + i . izmaksas ) ;

}

Izvade:

Ir divi ieraksti, kas atbilda iepriekšējiem nosacījumiem.

21. rindiņa – 32. rindiņa:

3. piemērs: Un (&&) operators

Mēs varam norādīt operatoru “un (&&)”, lai vienlaikus norādītu vairākus nosacījumus. Ja visi nosacījumi ir patiesi, vaicājums atgriež ierakstus, kas atbilst visiem nosacījumiem.

Šajā piemērā mēs atlasām ierakstus, ja daudzums ir lielāks par 20 un izmaksas ir 67,89.

Vaicājums ir ' no i valsts_cenās
kur i.daudzums < 20 && i.izmaksas == 67,89
izvēlieties es'

bija datus = no i iekšā valsts_cenas
kur i . daudzums < divdesmit && i . izmaksas == 67.89
izvēlieties i ;

katram ( bija i iekšā datus )
{
Konsole . WriteLine ( i . lieta + ' ' + i . atrašanās vieta + ' ' + i . daudzums + ' ' + i . izmaksas ) ;

}

Izvade:

Ir tikai viens ieraksts ar daudzumu, kas ir mazāks par 20, un izmaksas ir 67,89

21. rindiņa – 29. rindiņa:

4. piemērs: Vai (||) operators

Operators “vai (||)” tiek izmantots arī, lai vienlaikus norādītu vairākus nosacījumus. Ja vismaz viens nosacījums ir patiess, tiek atgriezti ieraksti, kas atbilst šim nosacījumam.

Šajā piemērā mēs atlasām ierakstus, ja to daudzums ir lielāks par 300 vai atrašanās vieta ir “Tokija”.

Vaicājums ir ' no i valsts_cenās
kur i.daudzums > 300 || i.location == 'Tokija'
izvēlieties es'

bija datus = no i iekšā valsts_cenas
kur i . daudzums > 300 || i . atrašanās vieta == 'Tokija'
izvēlieties i ;

katram ( bija i iekšā datus )
{
Konsole . WriteLine ( i . lieta + ' ' + i . atrašanās vieta + ' ' + i . daudzums + ' ' + i . izmaksas ) ;

}

Izvade:

Ir tikai viens ieraksts ar daudzumu, kas ir lielāks par 300 (pirmais nosacījums ir atbilstošs).

21. rindiņa – 29. rindiņa:

3. Pasūtiet pēc

Ja vēlaties kārtot ierakstus, ko atgriež LINQ vaicājums, augošā vai dilstošā secībā, pamatojoties uz vērtībām kādā no atribūtiem, vaicājumā varat izmantot operatoru “kārtot pēc”. Šis operators ir jānorāda pirms operatora “select”.

Sintakse:

Apskatīsim, kā LINQ vaicājumā izmantot operatoru “pasūtīt pēc”.

Augoša secība:

no iterators iekšā Datu avots
pasūtījums autors iterators . atribūts augšupejoša
izvēlieties iterators ;

Dilstoša secība:

no iterators iekšā Datu avots
pasūtījums autors iterators . atribūts lejupejoša
izvēlieties iterators ;

1. piemērs: Augoša secība

Atlasiet visus atribūtus no datu avota (saraksta) un atgrieziet tos augošā secībā, pamatojoties uz daudzuma atribūta vērtībām.

Vaicājums ir ' no i valsts_cenās
secībā pēc i.daudzuma augošā secībā
izvēlieties es'

bija datus = no i iekšā valsts_cenas
pasūtīt pēc i . daudzums augšupejoša
izvēlieties i ;

katram ( bija i iekšā datus )
{
Konsole . WriteLine ( i . lieta + ' ' + i . atrašanās vieta + ' ' + i . daudzums + ' ' + i . izmaksas ) ;

}

Izvade:

21. rindiņa – 29. rindiņa:

2. piemērs: Dilstoša secība

Atlasiet visus atribūtus no datu avota (saraksta) un atgrieziet tos dilstošā secībā, pamatojoties uz izmaksu atribūta vērtībām.

Vaicājums ir ' no i valsts_cenās
pasūtījuma pēc i.izmaksas dilstoša
izvēlieties es'

bija datus = no i iekšā valsts_cenas
pasūtīt pēc i . izmaksas lejupejoša
izvēlieties i ;

katram ( bija i iekšā datus )
{
Konsole . WriteLine ( i . lieta + ' ' + i . atrašanās vieta + ' ' + i . daudzums + ' ' + i . izmaksas ) ;

}

Izvade:

21. rindiņa – 29. rindiņa:

4. Ierobežojums

SQL ierobežojums ierobežo ierakstus, ko atgriež vaicājums. Tas atgriež populārākos ierakstus, ko atgriež vaicājums. Programmā LINQ mēs to varam panākt, izmantojot Skip() ar operatoru Take(). Take() iegūst norādīto ierakstu skaitu. Skip() tiek izmantots, lai norādītu sākuma ieraksta numuru. Tādā veidā mēs varam sasniegt LINQ “limita” funkcionalitāti.

Sintakse:

( no iterators iekšā Datu avots
izvēlieties iterators ) . Izlaist ( n ) . Ņem ( n ) ;
  1. Skip() tiek izmantots, lai izlaistu ierakstus un atgrieztu atlikušos ierakstus. Tas aizņem veselu skaitli, kas norāda izlaižamo elementu skaitu. Mūsu gadījumā tas ir 0.
  2. Take() tiek izmantots, lai no pirmā ieraksta ņemtu “n” ierakstu skaitu.

Piemērs:

Atlasiet pirmos trīs ierakstus no pieciem ierakstiem, kas tiek atgriezti vaicājumā.

Vaicājums ir ' (no i valsts_cenās
atlasiet i).Izlaist(0).Paņemt(3)”

bija datus = ( no i iekšā valsts_cenas
atlasiet i ) . Izlaist ( 0 ) . Ņem ( 3 ) ;

katram ( bija i iekšā datus )
{
Konsole . WriteLine ( i . lieta + ' ' + i . atrašanās vieta + ' ' + i . daudzums + ' ' + i . izmaksas ) ;

}

}

Izvade:

21. rindiņa – 28. rindiņa:

Secinājums

Mēs uzzinājām, kā rakstīt vaicājumus C# LINQ, kas ir līdzīgs SQL. Šīs apmācības ietvaros mēs apspriedām, kā izmantot operatoru “select”, lai atlasītu ierakstus no datu avota. Lai filtrētu vaicājuma atgrieztos ierakstus, mēs izmantojām operatoru “kur”, norādot nosacījumus. Pēc tam mēs uzzinājām, kā kārtot ierakstus, kas tiek atgriezti vaicājumā, izmantojot operatoru “kārtot pēc”. Visbeidzot, lai ierobežotu ierakstus, mēs izmantojām operatorus Skip () un Take ().