Podstawowe operacje kwerend LINQ (C#)
W tym temacie przedstawiono krótkie wprowadzenie do LINQ kwerendy wyrażenia, a niektóre z typowych rodzajów operacji wykonywanych w kwerendzie.Bardziej szczegółowych informacji znajduje się w następujących tematach:
Wyrażenia kwerend LINQ (Przewodnik programowania w języku C#)
Standardowe operatory zapytań — Omówienie
Wskazówki: pisanie zapytań w C# (LINQ)
[!UWAGA]
Jeśli już znasz języka kwerend, takich jak SQL lub XQuery, można pominąć większość tego tematu.Przeczytaj na temat "from klauzuli" w następnej sekcji, aby dowiedzieć się o zamówienie klauzul w LINQ kwerendy wyrażeń.
Uzyskanie źródła danych
W LINQ kwerendy, pierwszym krokiem jest określenie źródła danych.W języku C# jak w większości języków programowania zmienna musi być zadeklarowany, zanim będzie można go używać.W LINQ kwerendy, from klauzuli przypada wcześniej w celu wprowadzenia źródła danych (customers) i Zakres zmiennej (cust).
//queryAllCustomers is an IEnumerable<Customer>
var queryAllCustomers = from cust in customers
select cust;
Zakres zmiennej jest jak zmienna iteracji w foreach w pętli z tym, że nie właściwej iteracji pojawia się w wyrażeniu kwerendy.Gdy kwerenda jest wykonywana, zakres zmiennej będzie służyć jako odniesienie do każdy element w customers.Ponieważ kompilator można wywnioskować, typ cust, nie trzeba określić ręcznie.Zakres dodatkowych zmiennych mogą zostać wprowadzone przez let klauzuli.Aby uzyskać więcej informacji, zobacz Klauzula Let (odwołanie w C#).
[!UWAGA]
Dla danych nierodzajową źródeł takich jak ArrayList, zakres zmiennej musi być jawnie określone typy.Aby uzyskać więcej informacji, zobacz Porady: zapytanie w ArrayList za pomocą LINQ i Klauzula From (odwołanie w C#).
Filtrowanie
Prawdopodobnie najbardziej typowych operacji kwerendy jest stosowanie filtru w formie wyrażenie logiczne.Filtr powoduje, że aby zwracane były tylko te elementy, dla których wyrażenie jest prawdziwe.Wynik jest tworzone za pomocą where klauzuli.W efekcie filtr Określa, które elementy mają być pominięci sekwencji źródłowej.W poniższym przykładzie, tylko te customers kto posiada adres w Londynie są zwracane.
var queryLondonCustomers = from cust in customers
where cust.City == "London"
select cust;
Można użyć znanych C# logiczne AND i OR podmiotom gospodarczym stosowanie jak filtrować wiele wyrażeń w razie potrzeby w where klauzuli.Na przykład, aby zwrócić tylko klienci z "Londyn" AND którego nazwa jest "Devon" piszesz następujący kod:
where cust.City=="London" && cust.Name == "Devon"
Aby zwracało klientów z Londynu lub Paryż, możesz napisać poniższy kod:
where cust.City == "London" || cust.City == "Paris"
Aby uzyskać więcej informacji, zobacz Klauzula where (odwołanie w C#).
Zamawianie
Często jest to wygodne do sortowania zwrócone dane.orderby Klauzuli spowoduje, że elementy zwrócone sekwencyjnie, aby być sortowane zgodnie z modułu porównującego domyślny dla danego typu są sortowane.Na przykład, poniższa kwerenda mogą zostać rozszerzone w taki sposób, aby posortować wyniki w oparciu o Name właściwość.Ponieważ Name jest ciągiem, domyślny Moduł porównujący wykonuje sortowaniem alfabetycznym od A do Z.
var queryLondonCustomers3 =
from cust in customers
where cust.City == "London"
orderby cust.Name ascending
select cust;
Aby zamówić wyniki w odwrotnej kolejności, od Z do A, należy użyć orderby…descending klauzuli.
Aby uzyskać więcej informacji, zobacz Klauzula orderby (odwołanie w C#).
Grupowanie
group Klauzuli umożliwiają grupowanie wyników według klucza, który określisz.Na przykład można określić, że wyniki powinny być pogrupowane przez City tak, aby wszyscy klienci z Londynu lub paryskiej znajdują się w poszczególnych grup.W takim przypadku cust.City jest kluczem.
// queryCustomersByCity is an IEnumerable<IGrouping<string, Customer>>
var queryCustomersByCity =
from cust in customers
group cust by cust.City;
// customerGroup is an IGrouping<string, Customer>
foreach (var customerGroup in queryCustomersByCity)
{
Console.WriteLine(customerGroup.Key);
foreach (Customer customer in customerGroup)
{
Console.WriteLine(" {0}", customer.Name);
}
}
Kiedy koniec kwerendy z group klauzuli, wyniki formę listy list.Każdy element na liście jest obiekt, który ma Key Członkowskich i listę elementów, które są zgrupowane w obszarze tego klucza.W przypadku iterować kwerendę, która daje sekwencji grup, należy użyć zagnieżdżonych foreach pętli.Zewnętrzna pętla wykonuje iterację na każdej grupy, a wewnętrzna pętla wykonuje iterację przez członków każdej grupy.
Jeśli konieczne jest odwołanie się do wyników działania grupy, można użyć into słowo kluczowe, aby utworzyć identyfikator obiektu, który może być kierowane kwerendy dalej.Następująca kwerenda zwraca tylko tych grup, które zawierają więcej niż dwóch klientów:
// custQuery is an IEnumerable<IGrouping<string, Customer>>
var custQuery =
from cust in customers
group cust by cust.City into custGroup
where custGroup.Count() > 2
orderby custGroup.Key
select custGroup;
Aby uzyskać więcej informacji, zobacz group — Klauzula (odwołanie w C#).
Łączenie
Operacje sprzęgania utworzyć skojarzenia między sekwencji nie są jawnie modelowany w źródłach danych.Na przykład można wykonać sprzężenia, aby znaleźć wszystkich klientów i dystrybutorów, którzy mają taką samą lokalizację.W LINQjoin zawsze działa się klauzuli przeciwko kolekcji obiektów zamiast w tabelach bazy danych dotyczące bezpośrednio.
var innerJoinQuery =
from cust in customers
join dist in distributors on cust.City equals dist.City
select new { CustomerName = cust.Name, DistributorName = dist.Name };
W LINQ nie trzeba używać join tak często, podobnie jak w języku SQL, ponieważ klucze obce w LINQ są reprezentowane w modelu jako właściwości, które posiadają Kolekcja elementów.Na przykład Customer kolekcja zawiera obiekt Order obiektów.Zamiast wykonywania łączyć, używając zapisu kropkowego dostęp zamówienia:
from order in Customer.Orders...
Aby uzyskać więcej informacji, zobacz Klauzula join (odwołanie w C#).
Zaznaczenie (elementy wystające)
select Klauzula daje wyniki kwerendy i określa "kształt" lub typ każdego elementu zwracane.Na przykład, można określić, czy wyniki będą składać się z pełną Customer obiektów, tylko jeden element członkowski, podzbiór elementów członkowskich lub typu zupełnie inny wynik na podstawie obliczeń lub tworzenia nowego obiektu.Gdy select klauzuli produkuje coś innego niż kopię elementu źródła, operacja jest nazywana rzut.Korzystanie z prognozami do przekształcania danych jest zaawansowanych możliwości LINQ kwerendy wyrażeń.Aby uzyskać więcej informacji, zobacz Przekształcanie danych za pomocą LINQ (C#) i select — Klauzula (odwołanie w C#).
Zobacz też
Zadania
Wskazówki: pisanie zapytań w C# (LINQ)
Informacje
Typy anonimowe (Przewodnik programowania w języku C#)
Koncepcje
Wyrażenia kwerend LINQ (Przewodnik programowania w języku C#)
Podstawowe operacje zapytań (Visual Basic)