Psaní dotazů v C# LINQ

Psani Dotazu V C Linq



Podobně jako v SQL je možné psát dotazy v C# LINQ pomocí syntaxe dotazu. Tyto dotazy se používají v databázových aplikacích C# na webu k získání dat z databáze a zobrazení na webu uživatelům třetích stran. V této příručce probereme některé dotazy LINQ, které jsou podobné SQL. Za tímto účelem vytvoříme zdroj dat seznamu a použijeme v něm dotazy.

Syntaxe dotazu:

Podívejme se na obecnou syntaxi:

z iterátor v Zdroj dat
vybrat iterátor ;

Tady:







  1. Data_Source může být seznam, který obsahuje data.
  2. 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 dotazu
byl 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 dat
kde 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'

//vyberte, kde chcete filtrovat záznamy
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'

//vyberte, kde se mají filtrovat záznamy zadáním více podmínek
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'

byl data = z i v country_prices
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'

byl data = z i v country_prices
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 dat
objednat podle iterátor . atribut vzestupně
vybrat iterátor ;

Sestupné pořadí:

z iterátor v Zdroj dat
objednat 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'

byl data = z i v country_prices
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'

byl data = z i v country_prices
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 dat
vybrat iterátor ) . Přeskočit ( n ) . Vzít ( n ) ;
  1. 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.
  2. 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)”

byl data = ( z i v country_prices
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().