Písanie dotazov v C# LINQ

Pisanie Dotazov V C Linq



Podobne ako v SQL je možné písať dotazy v C# LINQ pomocou syntaxe dotazu. Tieto dotazy sa používajú v databázových aplikáciách C# na webe na získanie údajov z databázy a ich zobrazenie na webe používateľom tretích strán. V tejto príručke budeme diskutovať o niektorých dotazoch LINQ, ktoré sú podobné SQL. Na tento účel vytvoríme zdroj údajov zoznamu a použijeme v ňom dotazy.

Syntax dopytu:

Pozrime sa na generickú syntax:

od iterátor v Dátový zdroj
vyberte iterátor ;

Tu:







  1. Data_Source môže byť zoznam, ktorý obsahuje údaje.
  2. Iterátor sa používa na získanie prvkov z Data_Source.

Dátový zdroj

V celej tejto príručke budeme ako zdroj údajov používať nasledujúci zoznam záznamov a všetky dotazy sa aplikujú iba na tento zdroj údajov. Uistite sa, že tento kód spúšťate vo svojom prostredí a upravte príkazy dotazu pomocou nasledujúcich príkladov jeden po druhom, o ktorých budeme diskutovať:



použitím Systém ;
použitím System.Collections.Generic ;
použitím System.Linq ;
použitím Systém.Kolekcie ;

verejnosti trieda Výpočty
{
verejnosti statické neplatné Hlavná ( )
{
// Vytvorenie zoznamu
Uveďte country_prices = Nový Zoznam ( ) {

// Pridanie 5 záznamov do zoznamu
Nový Ceny ( ) { položka = 'ovocie' ,miesto = 'USA' , množstvo = 100 , náklady = 345,78 } ,
Nový Ceny ( ) { položka = 'orechy' ,miesto = 'India' , množstvo = 200 , náklady = 3645,78 } ,
Nový Ceny ( ) { položka = 'iní' ,miesto = 'Spojené kráľovstvo' , množstvo = 500 , náklady = 90,68 } ,
Nový Ceny ( ) { položka = 'olej' ,miesto = 'USA' , množstvo = 100 , náklady = 345,78 } ,
Nový Ceny ( ) { položka = 'papriky' ,miesto = 'USA' , množstvo = 10 , náklady = 67,89 } ,
} ;


pre každý ( bol i v country_prices )
{
Konzola . WriteLine ( i . položka + '' + i . umiestnenie + '' + i . množstvo + '' + i . náklady ) ;
}
}
}
verejnosti trieda Ceny {
verejnosti reťazec položka { dostať ; nastaviť ; }
verejnosti reťazec umiestnenie { dostať ; nastaviť ; }
verejnosti int množstvo { dostať ; nastaviť ; }
verejnosti dvojitý náklady { dostať ; nastaviť ; }
}

Záznamy:







Vysvetlenie:

1. Vytvorte ceny s nasledujúcimi atribútmi:

2. Vytvorte ďalšiu triedu, ktorá je „Výpočty“ s hlavnou metódou a vytvorte zoznam country_prices s piatimi záznamami.



Vyberte

„Vybrať“ je v podstate operátor projekcie, ktorý vyberá atribúty zo špecifikovaného zdroja údajov. Dotaz začína výrazom „od“. Potom zadáme iterátor, ktorý iteruje cez zdroj údajov. Potom je zadaný operátor „select“.

Syntax:

Všetky atribúty: z iterátora v Data_Source vyberte iterátor;

Špecifický atribút: z iterátora v Data_Source vyberte iterator.attribute;

Príklad 1:

Napíšme dotaz na výber všetkých záznamov zo zoznamu.

použitím Systém ;
použitím System.Collections.Generic ;
použitím System.Linq ;
použitím Systém.Kolekcie ;

verejnosti trieda Výpočty
{
verejnosti statické neplatné Hlavná ( )
{
// Vytvorenie zoznamu
Uveďte country_prices = Nový Zoznam ( ) {

// Pridanie 5 záznamov do zoznamu
Nový Ceny ( ) { položka = 'ovocie' ,miesto = 'USA' , množstvo = 100 , náklady = 345,78 } ,
Nový Ceny ( ) { položka = 'orechy' ,miesto = 'India' , množstvo = 200 , náklady = 3645,78 } ,
Nový Ceny ( ) { položka = 'iní' ,miesto = 'Spojené kráľovstvo' , množstvo = 500 , náklady = 90,68 } ,
Nový Ceny ( ) { položka = 'olej' ,miesto = 'USA' , množstvo = 100 , náklady = 345,78 } ,
Nový Ceny ( ) { položka = 'papriky' ,miesto = 'USA' , množstvo = 10 , náklady = 67,89 } ,
} ;

//vyberte operátor v dotaze
bol údajov = od i v country_prices
vyberte i ;

pre každý ( bol i v údajov )
{
Konzola . WriteLine ( i . položka + '' + i . umiestnenie + '' + i . množstvo + '' + i . náklady ) ;

}
}
}
verejnosti trieda Ceny {
verejnosti reťazec položka { dostať ; nastaviť ; }
verejnosti reťazec umiestnenie { dostať ; nastaviť ; }
verejnosti int množstvo { dostať ; nastaviť ; }
verejnosti dvojitý náklady { dostať ; nastaviť ; }
}

Výkon:

Tu sme v dotaze „vybrať“ nešpecifikovali žiadny atribút. Pomocou iterátora sme získali všetky atribúty z dotazu (údajov) v slučke „foreach“.

Príklad 2:

Teraz získajte položky zadaním atribútu položky v rámci operátora „select“. Dopyt je  “ z i v country_prices vyberte i.položku “.

//vyberte operátor na získanie atribútu položky v dotaze
bol údajov = od i v country_prices
vyberte i . položka ;

pre každý ( bol i v údajov )
{
Konzola . WriteLine ( i ) ;

}

Výkon:

Riadok č. 21 – Riadok č. 29:

2. Kde

Ak chcete filtrovať údaje na základe určitých podmienok, môžete v dotaze použiť operátor „kde“ spolu s klauzulou „select“. Najprv sa však použije operátor „kde“ a potom sa určí operátor výberu.

Syntax:

Pozrime sa, ako použiť operátor „kde“ v dotaze LINQ.

od iterátor v Dátový zdroj
kde stave / s
vyberte iterátor . atribút ;

Príklad 1: Jediná podmienka

Filtrujme záznamy podľa atribútu item. Použite operátor rovná sa (==) v operátori „kde“ ako podmienku a porovnajte iterátor s „paprikami“. Vyberú sa teda záznamy, ktoré súvisia s „papričkami“.

Dotaz je ' od i v country_prices
kde i.item == “papriky”
vyberte i“

//vyberte, kde sa majú filtrovať záznamy
bol údajov = od i v country_prices
kde i . položka == 'papriky'
vyberte i ;

pre každý ( bol i v údajov )
{
Konzola . WriteLine ( i . položka + '' + i . umiestnenie + '' + i . množstvo + '' + i . náklady ) ;

}

Výkon:

Existuje iba jeden záznam s položkou „Chillies“.

Riadok č. 21 – Riadok č. 30:

Príklad 2: Viaceré podmienky

Filtrujme záznamy na základe atribútov miesta a množstva. Množstvo by malo byť väčšie ako 50 a menšie ako 300. Miesto by malo byť „USA“.

Dotaz je ' od i v country_prices
kde i.množstvo > 50
kde i.množstvo < 300
kde i.location == „USA“
vyberte i“

//vyberte, kde sa majú filtrovať záznamy zadaním viacerých podmienok
bol údajov = od i v country_prices
kde i . množstvo > päťdesiat
kde i . množstvo < 300
kde i . umiestnenie == 'USA'
vyberte i ;

pre každý ( bol i v údajov )
{
Konzola . WriteLine ( i . položka + '' + i . umiestnenie + '' + i . množstvo + '' + i . náklady ) ;

}

Výkon:

Existujú dva záznamy, ktoré zodpovedali predchádzajúcim podmienkam.

Riadok č. 21 – Riadok č. 32:

Príklad 3: A (&&) Operátor

Môžeme špecifikovať operátor „and (&&)“ na zadanie viacerých podmienok naraz. Ak sú všetky podmienky splnené, dotaz vráti záznamy, ktoré spĺňajú všetky podmienky.

V tomto príklade vyberieme záznamy, ak je množstvo väčšie ako 20 a náklady sú 67,89.

Dotaz je ' od i v country_prices
kde i.množstvo < 20 && i.náklady == 67,89
vyberte i“

bol údajov = od i v country_prices
kde i . množstvo < dvadsať && i . náklady == 67,89
vyberte i ;

pre každý ( bol i v údajov )
{
Konzola . WriteLine ( i . položka + '' + i . umiestnenie + '' + i . množstvo + '' + i . náklady ) ;

}

Výkon:

Existuje len jeden záznam s množstvom, ktoré je menšie ako 20 a nákladom 67,89

Riadok č. 21 – Riadok č. 29:

Príklad 4: Alebo (||) Operátor

Operátor „alebo (||)“ sa tiež používa na zadanie viacerých podmienok naraz. Ak je splnená aspoň jedna podmienka, vrátia sa záznamy, ktoré túto podmienku spĺňajú.

V tomto príklade vyberieme záznamy, ak je množstvo väčšie ako 300 alebo ak je miesto „Tokio“.

Dotaz je ' od i v country_prices
kde i.množstvo > 300 || i.location == “Tokio”
vyberte i“

bol údajov = od i v country_prices
kde i . množstvo > 300 || i . umiestnenie == 'Tokio'
vyberte i ;

pre každý ( bol i v údajov )
{
Konzola . WriteLine ( i . položka + '' + i . umiestnenie + '' + i . množstvo + '' + i . náklady ) ;

}

Výkon:

Existuje len jeden záznam s množstvom, ktoré je väčšie ako 300 (prvá podmienka je zhodná).

Riadok č. 21 – Riadok č. 29:

3. Objednať podľa

Ak chcete usporiadať záznamy vrátené dotazom LINQ vo vzostupnom alebo zostupnom poradí na základe hodnôt v ktoromkoľvek z atribútov, môžete v dotaze použiť operátor „order by“. Tento operátor musíte zadať pred operátorom „select“.

Syntax:

Pozrime sa, ako použiť operátor „order by“ vo vnútri dotazu LINQ.

Vzostupné poradie:

od iterátor v Dátový zdroj
objednať podľa iterátor . atribút vzostupne
vyberte iterátor ;

Zostupné poradie:

od iterátor v Dátový zdroj
objednať podľa iterátor . atribút zostupne
vyberte iterátor ;

Príklad 1: Vzostupné poradie

Vyberte všetky atribúty zo zdroja údajov (zoznamu) a vráťte ich vo vzostupnom poradí na základe hodnôt v atribúte množstva.

Dotaz je ' od i v country_prices
poradie podľa i.množstvo vzostupne
vyberte i“

bol údajov = od i v country_prices
objednať podľa i . množstvo vzostupne
vyberte i ;

pre každý ( bol i v údajov )
{
Konzola . WriteLine ( i . položka + '' + i . umiestnenie + '' + i . množstvo + '' + i . náklady ) ;

}

Výkon:

Riadok č. 21 – Riadok č. 29:

Príklad 2: Zostupné poradie

Vyberte všetky atribúty zo zdroja údajov (zoznamu) a vráťte ich v zostupnom poradí na základe hodnôt v atribúte nákladov.

Dotaz je ' od i v country_prices
orderby i.cost zostupne
vyberte i“

bol údajov = od i v country_prices
objednať podľa i . náklady zostupne
vyberte i ;

pre každý ( bol i v údajov )
{
Konzola . WriteLine ( i . položka + '' + i . umiestnenie + '' + i . množstvo + '' + i . náklady ) ;

}

Výkon:

Riadok č. 21 – Riadok č. 29:

4. Limit

Limit v SQL obmedzuje záznamy, ktoré sú vrátené dotazom. Vráti najvyššie záznamy, ktoré sú vrátené dotazom. V LINQ to môžeme dosiahnuť použitím Skip() s operátorom Take(). Take() získa zadaný počet záznamov. Skip() sa používa na určenie počiatočného čísla záznamu. Týmto spôsobom môžeme dosiahnuť „limitnú“ funkčnosť v LINQ.

Syntax:

( od iterátor v Dátový zdroj
vyberte iterátor ) . Preskočiť ( n ) . Vezmite ( n ) ;
  1. Skip() sa používa na preskočenie záznamov a vrátenie zostávajúcich záznamov. Trvá celé číslo, ktoré určuje počet prvkov, ktoré sa majú preskočiť. V našom prípade je to 0.
  2. Take() sa používa na získanie „n“ počtu záznamov z prvého záznamu.

Príklad:

Vyberte prvé tri záznamy z piatich záznamov, ktoré vráti dotaz.

Dotaz je ' (od i v country_prices
vyberte i).Preskočiť(0).Zobrať(3)”

bol údajov = ( od i v country_prices
vyberte i ) . Preskočiť ( 0 ) . Vezmite ( 3 ) ;

pre každý ( bol i v údajov )
{
Konzola . WriteLine ( i . položka + '' + i . umiestnenie + '' + i . množstvo + '' + i . náklady ) ;

}

}

Výkon:

Riadok č. 21 – Riadok č. 28:

Záver

Naučili sme sa písať dotazy v jazyku C# LINQ, ktorý je podobný SQL. V rámci tohto tutoriálu sme diskutovali o tom, ako použiť operátor „select“ na výber záznamov zo zdroja údajov. Na filtrovanie záznamov vrátených dotazom sme použili operátor „kde“ zadaním podmienok. Potom sme sa naučili, ako triediť záznamy, ktoré sú vrátené dotazom pomocou operátora „order by“. Nakoniec sme na obmedzenie záznamov použili operátory Skip() a Take().