Udostępnij za pośrednictwem


Podstawowe operacje kwerendy 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 w kwerendzie LINQ (Podręcznik programowania C#)

Omówienie operatory kwerendy standardowe

Instruktaż: Zapisywanie kwerendy w języku 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 Niech klauzuli (C# odniesienia).

[!UWAGA]

Dla danych nierodzajową źródeł takich jak ArrayList, zakres zmiennej musi być jawnie określone typy.Aby uzyskać więcej informacji, zobacz Jak: kwerendy ArrayList LINQ i z klauzuli (C# odniesienia).

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 gdy klauzula (C# odniesienia).

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 (C# odniesienia).

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 Klauzula grupy (C# odniesienia).

Łą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 sprzężenia (C# odniesienia).

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łcenia danych z LINQ (C#) i Wybierz klauzuli (C# odniesienia).

Zobacz też

Zadania

Instruktaż: Zapisywanie kwerendy w języku C# (LINQ)

Informacje

Typy anonimowe (Podręcznik programowania C#)

Koncepcje

Wyrażenia w kwerendzie LINQ (Podręcznik programowania C#)

Podstawowe operacje kwerendy (Visual Basic)

Inne zasoby

Wprowadzenie do programu LINQ w C#

Słowa kluczowe kwerendy (C# odniesienia)