From — Klauzula (Visual Basic)

Określa co najmniej jedną zmienną zakresu i kolekcję do wykonywania zapytań.

Składnia

From element [ As type ] In collection [ _ ]  
  [, element2 [ As type2 ] In collection2 [, ... ] ]  

generatora

Termin Definicja
element Wymagany. Zmienna zakresu używana do iterowania elementów kolekcji. Zmienna zakresu służy do odwoływania się do każdego elementu członkowskiego collection obiektu jako zapytania iteruje za pośrednictwem elementu collection. Musi być typem wyliczalnym.
type Opcjonalny. Typ .element Jeśli nie type zostanie określony, typ element jest wywnioskowany z collection.
collection Wymagany. Odwołuje się do kolekcji do odpytywania. Musi być typem wyliczalnym.

Uwagi

Klauzula From służy do identyfikowania danych źródłowych zapytania i zmiennych używanych do odwoływania się do elementu z kolekcji źródłowej. Te zmienne są nazywane zmiennymi zakresu. Klauzula jest wymagana From dla zapytania, z wyjątkiem sytuacji, gdy Aggregate klauzula jest używana do identyfikowania zapytania zwracającego tylko zagregowane wyniki. Aby uzyskać więcej informacji, zobacz Agregacja klauzuli.

W zapytaniu można określić wiele From klauzul, aby zidentyfikować wiele kolekcji do sprzężenia. Po określeniu wielu kolekcji są iterowane niezależnie lub można je dołączyć, jeśli są powiązane. Kolekcje można łączyć niejawnie przy użyciu Select klauzuli lub jawnie przy użyciu Join klauzuli or Group Join . Alternatywnie można określić wiele zmiennych i kolekcji zakresu w jednej From klauzuli, z każdą powiązaną zmienną zakresu i kolekcją oddzieloną od innych przecinkami. Poniższy przykład kodu przedstawia obie opcje składni dla klauzuli From .

' Multiple From clauses in a query.
Dim result = From var1 In collection1, var2 In collection2

' Equivalent syntax with a single From clause.
Dim result2 = From var1 In collection1
              From var2 In collection2

Klauzula From definiuje zakres zapytania, który jest podobny do zakresu For pętli. W związku z tym każda element zmienna zakresu w zakresie zapytania musi mieć unikatową nazwę. Ponieważ można określić wiele From klauzul dla zapytania, kolejne From klauzule mogą odwoływać się do zmiennych zakresu w From klauzuli lub odwoływać się do zmiennych zakresu w poprzedniej From klauzuli. Na przykład w poniższym przykładzie przedstawiono klauzulę zagnieżdżona From , w której kolekcja w drugiej klauzuli jest oparta na właściwości zmiennej zakresu w pierwszej klauzuli.

Dim allOrders = From cust In GetCustomerList()
                From ord In cust.Orders
                Select ord

Po każdej From klauzuli można zastosować dowolną kombinację dodatkowych klauzul zapytania w celu uściślenia zapytania. Zapytanie można uściślić w następujący sposób:

  • Połącz wiele kolekcji niejawnie przy użyciu From klauzul i Select lub jawnie przy użyciu Join klauzul or Group Join .

  • Użyj klauzuli Where , aby filtrować wynik zapytania.

  • Posortuj wynik przy użyciu klauzuli Order By .

  • Grupuj podobne wyniki razem przy użyciu klauzuli Group By .

  • Użyj klauzuli , Aggregate aby zidentyfikować funkcje agregujące, aby ocenić cały wynik zapytania.

  • Użyj klauzuli , Let aby wprowadzić zmienną iteracji, której wartość jest określana przez wyrażenie zamiast kolekcji.

  • Użyj klauzuli , Distinct aby zignorować zduplikowane wyniki zapytania.

  • Zidentyfikuj części wyniku, które mają być zwracane przy użyciu Skipklauzul , Take, Skip Whilei Take While .

Przykład

Poniższe wyrażenie zapytania używa klauzuli From do deklarowania zmiennej cust zakresu dla każdego Customer obiektu w kolekcji customers . Klauzula Where używa zmiennej zakresu, aby ograniczyć dane wyjściowe do klientów z określonego regionu. Pętla For Each wyświetla nazwę firmy dla każdego klienta w wyniku zapytania.

Sub DisplayCustomersForRegion(ByVal customers As List(Of Customer),
                              ByVal region As String)

    Dim customersForRegion = From cust In customers
                             Where cust.Region = region

    For Each cust In customersForRegion
        Console.WriteLine(cust.CompanyName)
    Next
End Sub

Zobacz też