Syntaxe dotazu:
Podívejme se na obecnou syntaxi:
z iterátor v Zdroj datvybrat iterátor ;
Tady:
- Data_Source může být seznam, který obsahuje data.
- Iterátor se používá k načtení prvků z Data_Source.
Zdroj dat
V celé této příručce budeme jako zdroj dat používat následující seznam záznamů a všechny dotazy se vztahují pouze na tento zdroj dat. Ujistěte se, že tento kód spouštíte ve svém prostředí a upravte příkazy dotazu pomocí následujících příkladů jeden po druhém, o kterých budeme diskutovat:
použitím Systém ;
použitím System.Collections.Generic ;
použitím System.Linq ;
použitím Systém. Kolekce ;
veřejnost třída Výpočty
{
veřejnost statický prázdnota Hlavní ( )
{
// Vytvoření seznamu
Uveďte country_prices = Nový Seznam ( ) {
// Přidání 5 záznamů do seznamu
Nový Ceny ( ) { položka = 'Ovoce' ,umístění = 'USA' , Množství = 100 , náklady = 345,78 } ,
Nový Ceny ( ) { položka = 'ořechy' ,umístění = 'Indie' , Množství = 200 , náklady = 3645,78 } ,
Nový Ceny ( ) { položka = 'ostatní' ,umístění = 'SPOJENÉ KRÁLOVSTVÍ' , Množství = 500 , náklady = 90,68 } ,
Nový Ceny ( ) { položka = 'olej' ,umístění = 'USA' , Množství = 100 , náklady = 345,78 } ,
Nový Ceny ( ) { položka = 'papriky' ,umístění = 'USA' , Množství = 10 , náklady = 67,89 } ,
} ;
pro každého ( byl i v country_prices )
{
Řídicí panel . WriteLine ( i . položka + '' + i . umístění + '' + i . Množství + '' + i . náklady ) ;
}
}
}
veřejnost třída Ceny {
veřejnost tětiva položka { dostat ; soubor ; }
veřejnost tětiva umístění { dostat ; soubor ; }
veřejnost int Množství { dostat ; soubor ; }
veřejnost dvojnásobek náklady { dostat ; soubor ; }
}
Evidence:
Vysvětlení:
1. Vytvořte ceny s následujícími atributy:
2. Vytvořte další třídu, která je „Výpočty“ s hlavní metodou a vytvořte seznam country_prices s pěti záznamy.
Vybrat
„Vybrat“ je v zásadě operátor projekce, který vybírá atributy ze zadaného zdroje dat. Dotaz začíná „od“. Poté určíme iterátor, který iteruje přes zdroj dat. Poté je určen operátor „select“.
Syntax:
Všechny atributy: z iterátoru v Data_Source vyberte iterátor;
Specifický atribut: z iterátoru v Data_Source vyberte iterator.attribute;
Příklad 1:
Napíšeme dotaz pro výběr všech záznamů ze seznamu.
použitím Systém ;použitím System.Collections.Generic ;
použitím System.Linq ;
použitím Systém. Kolekce ;
veřejnost třída Výpočty
{
veřejnost statický prázdnota Hlavní ( )
{
// Vytvoření seznamu
Uveďte country_prices = Nový Seznam ( ) {
// Přidání 5 záznamů do seznamu
Nový Ceny ( ) { položka = 'Ovoce' ,umístění = 'USA' , Množství = 100 , náklady = 345,78 } ,
Nový Ceny ( ) { položka = 'ořechy' ,umístění = 'Indie' , Množství = 200 , náklady = 3645,78 } ,
Nový Ceny ( ) { položka = 'ostatní' ,umístění = 'SPOJENÉ KRÁLOVSTVÍ' , Množství = 500 , náklady = 90,68 } ,
Nový Ceny ( ) { položka = 'olej' ,umístění = 'USA' , Množství = 100 , náklady = 345,78 } ,
Nový Ceny ( ) { položka = 'papriky' ,umístění = 'USA' , Množství = 10 , náklady = 67,89 } ,
} ;
//vyber operátor v dotazu
byl data = z i v country_prices
vybrat i ;
pro každého ( byl i v data )
{
Řídicí panel . WriteLine ( i . položka + '' + i . umístění + '' + i . Množství + '' + i . náklady ) ;
}
}
}
veřejnost třída Ceny {
veřejnost tětiva položka { dostat ; soubor ; }
veřejnost tětiva umístění { dostat ; soubor ; }
veřejnost int Množství { dostat ; soubor ; }
veřejnost dvojnásobek náklady { dostat ; soubor ; }
}
Výstup:
Zde jsme v dotazu „select“ neurčili žádný atribut. Všechny atributy jsme načetli z dotazu (dat) uvnitř smyčky „foreach“ pomocí iterátoru.
Příklad 2:
Nyní získejte položky zadáním atributu položky v operátoru „select“. Dotaz je “ z i v country_prices vyberte i.položku “.
//vyberte operátor pro získání atributu položky v dotazubyl data = z i v country_prices
vybrat i . položka ;
pro každého ( byl i v data )
{
Řídicí panel . WriteLine ( i ) ;
}
Výstup:
Řádek č. 21 – řádek č. 29:
2. Kde
Pokud chcete data filtrovat na základě určitých podmínek, můžete v dotazu použít operátor „kde“ spolu s klauzulí „select“. Nejprve se však použije operátor „kde“ a poté se zadá operátor select.
Syntax:
Podívejme se, jak použít operátor „kde“ uvnitř dotazu LINQ.
z iterátor v Zdroj datkde stav / s
vybrat iterátor . atribut ;
Příklad 1: Jediný stav
Filtrujme záznamy podle atributu item. Použijte operátor rovná se (==) v operátoru „kde“ jako podmínku a porovnejte iterátor s „paprikami“. Vyberou se tedy záznamy, které souvisejí s „papričkami“.
Dotaz je ' od i v country_prices
kde i.item == “papriky”
vyberte i'
byl data = z i v country_prices
kde i . položka == 'papriky'
vybrat i ;
pro každého ( byl i v data )
{
Řídicí panel . WriteLine ( i . položka + '' + i . umístění + '' + i . Množství + '' + i . náklady ) ;
}
Výstup:
Existuje pouze jeden záznam s položkou „Chillies“.
Řádek č. 21 – řádek č. 30:
Příklad 2: Více podmínek
Filtrujme záznamy podle atributů umístění a množství. Množství by mělo být větší než 50 a menší než 300. Umístění by mělo být „USA“.
Dotaz je ' od i v country_prices
kde i.množství > 50
kde i.množství < 300
kde i.location == „USA“
vyberte i'
byl data = z i v country_prices
kde i . Množství > padesáti
kde i . Množství < 300
kde i . umístění == 'USA'
vybrat i ;
pro každého ( byl i v data )
{
Řídicí panel . WriteLine ( i . položka + '' + i . umístění + '' + i . Množství + '' + i . náklady ) ;
}
Výstup:
Existují dva záznamy, které odpovídaly předchozím podmínkám.
Řádek č. 21 – řádek č. 32:
Příklad 3: A (&&) Operátor
Můžeme zadat operátor „and (&&)“ a zadat více podmínek najednou. Pokud jsou splněny všechny podmínky, dotaz vrátí záznamy, které splňují všechny podmínky.
V tomto příkladu vybereme záznamy, pokud je množství větší než 20 a náklady jsou 67,89.
Dotaz je ' od i v country_prices
kde i.množství < 20 && i.náklady == 67,89
vyberte i'
kde i . Množství < dvacet && i . náklady == 67,89
vybrat i ;
pro každého ( byl i v data )
{
Řídicí panel . WriteLine ( i . položka + '' + i . umístění + '' + i . Množství + '' + i . náklady ) ;
}
Výstup:
Existuje pouze jeden záznam s množstvím menším než 20 a nákladem 67,89
Řádek č. 21 – řádek č. 29:
Příklad 4: Nebo (||) Operátor
Operátor „nebo (||)“ se také používá k zadání více podmínek najednou. Pokud je splněna alespoň jedna podmínka, vrátí se záznamy, které tuto podmínku splňují.
V tomto příkladu vybereme záznamy, pokud je množství větší než 300 nebo umístění je „Tokio“.
Dotaz je ' od i v country_prices
kde i.množství > 300 || i.location == “Tokio”
vyberte i'
kde i . Množství > 300 || i . umístění == 'Tokio'
vybrat i ;
pro každého ( byl i v data )
{
Řídicí panel . WriteLine ( i . položka + '' + i . umístění + '' + i . Množství + '' + i . náklady ) ;
}
Výstup:
Existuje pouze jeden záznam s množstvím větším než 300 (první podmínka je splněna).
Řádek č. 21 – řádek č. 29:
3. Objednejte podle
Chcete-li uspořádat záznamy vrácené dotazem LINQ ve vzestupném nebo sestupném pořadí na základě hodnot v kterémkoli z atributů, můžete v dotazu použít operátor „pořadí podle“. Tento operátor musíte zadat před operátorem „select“.
Syntax:
Podívejme se, jak použít operátor „order by“ uvnitř dotazu LINQ.
Vzestupně:
z iterátor v Zdroj datobjednat podle iterátor . atribut vzestupně
vybrat iterátor ;
Sestupné pořadí:
z iterátor v Zdroj datobjednat podle iterátor . atribut klesající
vybrat iterátor ;
Příklad 1: Vzestupně
Vyberte všechny atributy ze zdroje dat (seznamu) a vraťte je ve vzestupném pořadí na základě hodnot v atributu množství.
Dotaz je ' od i v country_prices
pořadí podle i.množství vzestupně
vyberte i'
objednat i . Množství vzestupně
vybrat i ;
pro každého ( byl i v data )
{
Řídicí panel . WriteLine ( i . položka + '' + i . umístění + '' + i . Množství + '' + i . náklady ) ;
}
Výstup:
Řádek č. 21 – řádek č. 29:
Příklad 2: Sestupné pořadí
Vyberte všechny atributy ze zdroje dat (seznamu) a vraťte je v sestupném pořadí na základě hodnot v atributu cost.
Dotaz je ' od i v country_prices
orderby i.cost sestupně
vyberte i'
objednat i . náklady klesající
vybrat i ;
pro každého ( byl i v data )
{
Řídicí panel . WriteLine ( i . položka + '' + i . umístění + '' + i . Množství + '' + i . náklady ) ;
}
Výstup:
Řádek č. 21 – řádek č. 29:
4. Limit
Limit v SQL omezuje záznamy, které jsou vráceny dotazem. Vrátí horní záznamy, které jsou vráceny dotazem. V LINQ toho můžeme dosáhnout použitím Skip() s operátorem Take(). Take() získá zadaný počet záznamů. Skip() se používá k určení počátečního čísla záznamu. Tímto způsobem můžeme dosáhnout funkce „limit“ v LINQ.
Syntax:
( z iterátor v Zdroj datvybrat iterátor ) . Přeskočit ( n ) . Vzít ( n ) ;
- Skip() se používá k přeskočení záznamů a vrácení zbývajících záznamů. Vyžaduje celé číslo, které určuje počet prvků, které mají být přeskočeny. V našem případě je to 0.
- Take() se používá k převzetí „n“ počtu záznamů z prvního záznamu.
Příklad:
Vyberte první tři záznamy z pěti záznamů vrácených dotazem.
Dotaz je ' (od i v country_prices
vyberte i).Přeskočit(0).Vezměte(3)”
vybrat i ) . Přeskočit ( 0 ) . Vzít ( 3 ) ;
pro každého ( byl i v data )
{
Řídicí panel . WriteLine ( i . položka + '' + i . umístění + '' + i . Množství + '' + i . náklady ) ;
}
}
Výstup:
Řádek č. 21 – řádek č. 28:
Závěr
Naučili jsme se psát dotazy v C# LINQ, který je podobný SQL. V rámci tohoto tutoriálu jsme diskutovali o tom, jak použít operátor „select“ k výběru záznamů ze zdroje dat. K filtrování záznamů vrácených dotazem jsme použili operátor „kde“ zadáním podmínek. Poté jsme se naučili, jak třídit záznamy, které jsou vráceny dotazem, pomocí operátoru „order by“. Nakonec jsme k omezení záznamů použili operátory Skip() a Take().