Pisanie zapytań w C# LINQ

Pisanie Zapytan W C Linq



Podobnie jak w SQL, możliwe jest pisanie zapytań w C# LINQ przy użyciu składni zapytania. Te zapytania są używane w aplikacjach bazodanowych języka C# w sieci Web w celu pobierania danych z bazy danych i wyświetlania ich w sieci Web użytkownikom zewnętrznym. W tym przewodniku omówimy niektóre zapytania LINQ, które są podobne do SQL. W tym celu utworzymy źródło danych listy i zastosujemy w nim zapytania.

Składnia zapytania:

Spójrzmy na ogólną składnię:

z iterator W Źródło danych
wybierać iterator ;

Tutaj:







  1. Data_Source może być listą zawierającą dane.
  2. Iterator służy do pobierania elementów z Data_Source.

Źródło danych

W całym tym przewodniku będziemy używać następującej listy rekordów jako źródła danych, a wszystkie zapytania są stosowane tylko do tego źródła danych. Upewnij się, że uruchamiasz ten kod w swoim środowisku i modyfikujesz instrukcje zapytania za pomocą następujących przykładów jeden po drugim, które omówimy:



za pomocą System ;
za pomocą System.Collections.Generic ;
za pomocą System.Linq ;
za pomocą System.Collections ;

publiczny klasa Obliczenia
{
publiczny statyczny próżnia Główny ( )
{
// Tworzenie listy
Podaj ceny_krajów = nowy Lista ( ) {

// Dodaj 5 rekordów do listy
nowy Ceny ( ) { przedmiot = 'Owoce' ,Lokalizacja = 'USA' , ilość = 100 , koszt = 345,78 } ,
nowy Ceny ( ) { przedmiot = 'Orzechy' ,Lokalizacja = 'Indie' , ilość = 200 , koszt = 3645,78 } ,
nowy Ceny ( ) { przedmiot = 'Inni' ,Lokalizacja = „Wielka Brytania” , ilość = 500 , koszt = 90,68 } ,
nowy Ceny ( ) { przedmiot = 'olej' ,Lokalizacja = 'USA' , ilość = 100 , koszt = 345,78 } ,
nowy Ceny ( ) { przedmiot = „Chili” ,Lokalizacja = 'USA' , ilość = 10 , koszt = 67,89 } ,
} ;


dla każdego ( był I W ceny_kraju )
{
Konsola . Linia zapisu ( I . przedmiot + ' ' + I . Lokalizacja + ' ' + I . ilość + ' ' + I . koszt ) ;
}
}
}
publiczny klasa Ceny {
publiczny strunowy przedmiot { Dostawać ; ustawić ; }
publiczny strunowy Lokalizacja { Dostawać ; ustawić ; }
publiczny int ilość { Dostawać ; ustawić ; }
publiczny podwójnie koszt { Dostawać ; ustawić ; }
}

Dokumentacja:







Wyjaśnienie:

1. Utwórz ceny z następującymi atrybutami:

2. Utwórz kolejną klasę „Obliczenia” z metodą main i utwórz listę country_prices z pięcioma rekordami.



Wybierać

Zasadniczo „select” to operator projekcji, który wybiera atrybuty z określonego źródła danych. Zapytanie zaczyna się od „od”. Następnie określamy iterator, który iteruje po źródle danych. Następnie określany jest operator „select”.

Składnia:

Wszystkie atrybuty: z iteratora w Data_Source wybierz iterator;

Specyficzny atrybut: z iteratora w Data_Source wybierz iterator.attribute;

Przykład 1:

Napiszmy zapytanie, które wybierze wszystkie rekordy z listy.

za pomocą System ;
za pomocą System.Collections.Generic ;
za pomocą System.Linq ;
za pomocą System.Collections ;

publiczny klasa Obliczenia
{
publiczny statyczny próżnia Główny ( )
{
// Tworzenie listy
Podaj ceny_krajów = nowy Lista ( ) {

// Dodaj 5 rekordów do listy
nowy Ceny ( ) { przedmiot = 'Owoce' ,Lokalizacja = 'USA' , ilość = 100 , koszt = 345,78 } ,
nowy Ceny ( ) { przedmiot = 'Orzechy' ,Lokalizacja = 'Indie' , ilość = 200 , koszt = 3645,78 } ,
nowy Ceny ( ) { przedmiot = 'Inni' ,Lokalizacja = „Wielka Brytania” , ilość = 500 , koszt = 90,68 } ,
nowy Ceny ( ) { przedmiot = 'olej' ,Lokalizacja = 'USA' , ilość = 100 , koszt = 345,78 } ,
nowy Ceny ( ) { przedmiot = „Chili” ,Lokalizacja = 'USA' , ilość = 10 , koszt = 67,89 } ,
} ;

//wybierz operatora w zapytaniu
był dane = z I W ceny_kraju
wybierać I ;

dla każdego ( był I W dane )
{
Konsola . Linia zapisu ( I . przedmiot + ' ' + I . Lokalizacja + ' ' + I . ilość + ' ' + I . koszt ) ;

}
}
}
publiczny klasa Ceny {
publiczny strunowy przedmiot { Dostawać ; ustawić ; }
publiczny strunowy Lokalizacja { Dostawać ; ustawić ; }
publiczny int ilość { Dostawać ; ustawić ; }
publiczny podwójnie koszt { Dostawać ; ustawić ; }
}

Wyjście:

Tutaj nie określiliśmy żadnego atrybutu w zapytaniu „wybierz”. Pobraliśmy wszystkie atrybuty z zapytania (dane) wewnątrz pętli „foreach” za pomocą iteratora.

Przykład 2:

Teraz pobierz elementy, określając atrybut elementu w operatorze „wybierz”. Zapytanie brzmi „ z i w country_prices wybierz i.item ”.

//wybierz operatora, aby uzyskać atrybut pozycji w zapytaniu
był dane = z I W ceny_kraju
wybierać I . przedmiot ;

dla każdego ( był I W dane )
{
Konsola . Linia zapisu ( I ) ;

}

Wyjście:

Linia nr 21 – Linia nr 29:

2. Gdzie

Jeśli chcesz filtrować dane na podstawie pewnych warunków, możesz użyć operatora „where” w zapytaniu wraz z klauzulą ​​„select”. Ale najpierw używany jest operator „gdzie”, a następnie określany jest operator wyboru.

Składnia:

Zobaczmy, jak użyć operatora „where” w zapytaniu LINQ.

z iterator W Źródło danych
Gdzie stan / S
wybierać iterator . atrybut ;

Przykład 1: Pojedynczy warunek

Przefiltrujmy rekordy na podstawie atrybutu item. Użyj operatora równości (==) w operatorze „where” jako warunku i porównaj iterator z „Chillies”. Wybierane są więc rekordy związane z „chilli”.

Zapytanie brzmi „ od i w country_prices
gdzie i.item == „Chili”
wybierz ja”

//wybierz, gdzie filtrować rekordy
był dane = z I W ceny_kraju
Gdzie I . przedmiot == „Chili”
wybierać I ;

dla każdego ( był I W dane )
{
Konsola . Linia zapisu ( I . przedmiot + ' ' + I . Lokalizacja + ' ' + I . ilość + ' ' + I . koszt ) ;

}

Wyjście:

Jest tylko jeden rekord z pozycją „Chilli”.

Linia nr 21 – Linia nr 30:

Przykład 2: Wiele warunków

Przefiltrujmy rekordy na podstawie atrybutów lokalizacji i ilości. Ilość powinna być większa niż 50 i mniejsza niż 300. Lokalizacja powinna być „USA”.

Zapytanie brzmi „ od i w country_prices
gdzie i.ilość > 50
gdzie i.ilość < 300
gdzie i.lokalizacja == „USA”
wybierz ja”

//wybierz, gdzie filtrować rekordy, określając wiele warunków
był dane = z I W ceny_kraju
Gdzie I . ilość > pięćdziesiąt
Gdzie I . ilość < 300
Gdzie I . Lokalizacja == 'USA'
wybierać I ;

dla każdego ( był I W dane )
{
Konsola . Linia zapisu ( I . przedmiot + ' ' + I . Lokalizacja + ' ' + I . ilość + ' ' + I . koszt ) ;

}

Wyjście:

Istnieją dwa rekordy, które spełniają poprzednie warunki.

Linia nr 21 – Linia nr 32:

Przykład 3: I (&&) Operator

Możemy określić operator „and (&&)”, aby określić wiele warunków jednocześnie. Jeśli wszystkie warunki są spełnione, zapytanie zwraca rekordy, które spełniają wszystkie warunki.

W tym przykładzie wybieramy rekordy, jeśli ilość jest większa niż 20, a koszt wynosi 67,89.

Zapytanie brzmi „ od i w country_prices
gdzie i.ilość < 20 && i.koszt == 67,89
wybierz ja”

był dane = z I W ceny_kraju
Gdzie I . ilość < 20 && I . koszt == 67,89
wybierać I ;

dla każdego ( był I W dane )
{
Konsola . Linia zapisu ( I . przedmiot + ' ' + I . Lokalizacja + ' ' + I . ilość + ' ' + I . koszt ) ;

}

Wyjście:

Istnieje tylko jeden rekord z ilością mniejszą niż 20 i kosztem 67,89

Linia nr 21 – Linia nr 29:

Przykład 4: Lub (||) Operator

Operator „lub (||)” jest również używany do określania wielu warunków jednocześnie. Jeśli co najmniej jeden warunek jest spełniony, zwracane są rekordy spełniające ten warunek.

W tym przykładzie wybieramy rekordy, jeśli ilość jest większa niż 300 lub lokalizacja to „Tokio”.

Zapytanie brzmi „ od i w country_prices
gdzie i.ilość > 300 || i.lokalizacja == „Tokio”
wybierz ja”

był dane = z I W ceny_kraju
Gdzie I . ilość > 300 || I . Lokalizacja == 'Tokio'
wybierać I ;

dla każdego ( był I W dane )
{
Konsola . Linia zapisu ( I . przedmiot + ' ' + I . Lokalizacja + ' ' + I . ilość + ' ' + I . koszt ) ;

}

Wyjście:

Jest tylko jeden rekord z ilością większą niż 300 (spełniony jest pierwszy warunek).

Linia nr 21 – Linia nr 29:

3. Zamów wg

Jeśli chcesz rozmieścić rekordy zwracane przez zapytanie LINQ w kolejności rosnącej lub malejącej na podstawie wartości dowolnego atrybutu, możesz użyć w zapytaniu operatora „order by”. Musisz określić ten operator przed operatorem „select”.

Składnia:

Zobaczmy, jak użyć operatora „order by” w zapytaniu LINQ.

Rosnąco:

z iterator W Źródło danych
zamówienie przez iterator . atrybut rosnąco
wybierać iterator ;

Kolejność malejąca:

z iterator W Źródło danych
zamówienie przez iterator . atrybut malejąco
wybierać iterator ;

Przykład 1: Rosnąco

Wybierz wszystkie atrybuty ze źródła danych (listy) i zwróć je w kolejności rosnącej na podstawie wartości w atrybucie ilość.

Zapytanie brzmi „ od i w country_prices
zamów wg i.ilość rosnąco
wybierz ja”

był dane = z I W ceny_kraju
zamówienie przez I . ilość rosnąco
wybierać I ;

dla każdego ( był I W dane )
{
Konsola . Linia zapisu ( I . przedmiot + ' ' + I . Lokalizacja + ' ' + I . ilość + ' ' + I . koszt ) ;

}

Wyjście:

Linia nr 21 – Linia nr 29:

Przykład 2: Kolejność malejąca

Wybierz wszystkie atrybuty ze źródła danych (listy) i zwróć je w kolejności malejącej na podstawie wartości w atrybucie cost.

Zapytanie brzmi „ od i w country_prices
orderby i.cost malejąco
wybierz ja”

był dane = z I W ceny_kraju
zamówienie przez I . koszt malejąco
wybierać I ;

dla każdego ( był I W dane )
{
Konsola . Linia zapisu ( I . przedmiot + ' ' + I . Lokalizacja + ' ' + I . ilość + ' ' + I . koszt ) ;

}

Wyjście:

Linia nr 21 – Linia nr 29:

4. Limit

Limit w SQL ogranicza rekordy zwracane przez zapytanie. Zwraca najwyższe rekordy, które są zwracane przez zapytanie. W LINQ możemy to osiągnąć, używając funkcji Skip() z operatorem Take(). Take() pobiera określoną liczbę rekordów. Skip() służy do określenia numeru rekordu początkowego. W ten sposób możemy osiągnąć funkcjonalność „limitu” w LINQ.

Składnia:

( z iterator W Źródło danych
wybierać iterator ) . Pominąć ( N ) . Brać ( N ) ;
  1. Skip() służy do pomijania rekordów i zwracania pozostałych rekordów. Przyjmuje liczbę całkowitą, która określa liczbę elementów do pominięcia. W naszym przypadku jest to 0.
  2. Take() służy do pobrania „n” liczby rekordów z pierwszego rekordu.

Przykład:

Wybierz pierwsze trzy rekordy spośród pięciu zwracanych przez zapytanie.

Zapytanie brzmi „ (od i w country_prices
wybierz i. Pomiń (0). Weź (3)”

był dane = ( z I W ceny_kraju
wybierać I ) . Pominąć ( 0 ) . Brać ( 3 ) ;

dla każdego ( był I W dane )
{
Konsola . Linia zapisu ( I . przedmiot + ' ' + I . Lokalizacja + ' ' + I . ilość + ' ' + I . koszt ) ;

}

}

Wyjście:

Linia nr 21 – Linia nr 28:

Wniosek

Nauczyliśmy się pisać zapytania w C# LINQ, który jest podobny do SQL. W ramach tego samouczka omówiliśmy, jak używać operatora „select” do wybierania rekordów ze źródła danych. Aby filtrować rekordy zwracane przez zapytanie, użyliśmy operatora „where”, określając warunki. Następnie nauczyliśmy się sortować rekordy zwracane przez zapytanie za pomocą operatora „order by”. Wreszcie, aby ograniczyć liczbę rekordów, wykorzystaliśmy operatory Skip() i Take().