Udostępnij za pośrednictwem


Podstawowe operacje zapytań (Visual Basic)

Ten temat zawiera krótkie wprowadzenie do Zapytanie o języku zintegrowanym (LINQ) wyrażeń w języku Visual Basic, a także do niektórych z typowych rodzajów operacji wykonywanych w kwerendzie.Aby uzyskać więcej informacji, zobacz następujące tematy:

Wprowadzenie do LINQ w Visual Basic

Zapytania (Visual Basic)

Wskazówki: Pisanie zapytań w Visual Basic

Określanie źródła danych (z)

W LINQ kwerendy, pierwszym krokiem jest określenie źródła danych, który ma być zbadana.W związku z tym From klauzula w kwerendzie jest zawsze na pierwszym. Operatory zapytań wybierz i kształt wynik, w zależności od typu źródła.

Dim query = From cust In customers
'           ...

From Klauzula Określa źródło danych customersi Zakres zmiennej, cust.Zakres zmiennej jest jak zmienna iteracji pętli, ale w wyrażeniu kwerendy występuje nie właściwej iteracji.Gdy kwerenda jest wykonywana, często przy użyciu For Each pętli, zmienna zakresu służy jako punkt odniesienia, aby każdy element w customers.Ponieważ kompilator można wywnioskować, typ cust, nie trzeba określić ręcznie.Przykłady kwerendy, napisane z i bez konieczności wpisywania jawne, zobacz Relacje typu w operacjach zapytań (Visual Basic).

Aby uzyskać więcej informacji o sposobach używania From klauzuli w języku Visual Basic, zobacz From — Klauzula (Visual Basic).

Filtrowanie danych (gdzie)

Prawdopodobnie najbardziej typowych operacji kwerendy jest stosowanie filtru w formie wyrażenie logiczne.Kwerenda zwraca tylko te elementy, dla których wyrażenie jest prawdziwe.A Where jest używana klauzula, aby wykonać filtrowanie.Filtr określa, które elementy w źródle danych, aby uwzględnić w wynikowym sekwencji.W poniższym przykładzie zawarte są tylko tych klientów, którzy mają adres w Londynie.

Dim londonCusts = From cust In customers
                  Where cust.City = "London" 
'                 ...

Można użyć operatorów logicznych, takich jak And i Or do łączenia wyrażeń filtru w Where klauzuli.Na przykład aby przywrócić tylko tych klientów, którzy są z Londynu i którego nazwa jest Devon, należy użyć następujący kod:

Where cust.City = "London" And cust.Name = "Devon" 

Aby zwracało klientów z Londynu lub Paryż, należy użyć następującego kodu:

Where cust.City = "London" Or cust.City = "Paris" 

Aby uzyskać więcej informacji o sposobach używania Where klauzuli w języku Visual Basic, zobacz Where — Klauzula (Visual Basic).

Porządkowanie danych (zlecenie)

Często wygodnie jest sortowanie zwracanych danych w określonej kolejności.Order By Klauzuli spowoduje, że elementy zwrócone sekwencyjnie, aby sortować według określonego pola lub pól.Na przykład, poniższa kwerenda sortuje wyniki oparte na Name właściwość.Ponieważ Name jest ciągiem, zwrócone dane są sortowane alfabetycznie, od A do Z.

Dim londonCusts1 = From cust In customers
                   Where cust.City = "London"
                   Order By cust.Name Ascending
'                   ...

Aby zamówić wyniki w odwrotnej kolejności, od Z do A, należy użyć Order By...Descending klauzuli.Wartością domyślną jest Ascending gdy ani Ascending ani Descending jest określony.

Aby uzyskać więcej informacji o sposobach używania Order By klauzuli w języku Visual Basic, zobacz Order By — Klauzula (Visual Basic).

Wybieranie danych (wybór)

Select Klauzula określa formę i treść zwracane elementy.Na przykład, można określić, czy wyniki będą składać się z pełną Customer obiektów, tylko jeden Customer właściwość, podzbiór właściwości, kombinacji właściwości z różnych źródeł danych lub nowego typu wyniku w oparciu o obliczenie.Gdy Select klauzuli produkuje coś innego niż kopię elementu źródła, operacja jest nazywana rzut.

Aby pobrać kolekcja, która składa się z pełną Customer obiektów, zaznacz zakres zmiennej się:

Dim londonCusts2 = From cust In customers
                   Where cust.City = "London"
                   Order By cust.Name Ascending
                   Select cust

Jeśli Customer wystąpienie jest duży obiekt, który ma wiele pól i wszystkie opcje, które chcesz pobrać to nazwa, można wybrać cust.Name, jak pokazano w poniższym przykładzie.Wnioskowanie typu lokalnej rozpoznaje to zmienia typ wyników z kolekcją Customer obiekty, aby kolekcja ciągów.

Dim londonCusts3 = From cust In customers
                   Where cust.City = "London"
                   Order By cust.Name Ascending
                   Select cust.Name

Aby zaznaczyć kilka pól ze źródła danych, użytkownik ma dwie możliwości:

  • W Select klauzuli, określ pola mają zostać uwzględnione w wynikach.Kompilator określi typ anonimowy, którym te pola, ponieważ jego właściwości.Aby uzyskać więcej informacji, zobacz Typy anonimowe (Visual Basic).

    Ponieważ w następującym przykładzie zwracane elementy są instancjami typ anonimowy, nie możesz odwołać się do typu według nazwy innych miejscach w kodzie.Wyznaczone przez kompilator nazwy dla typu zawiera znaki, które nie są prawidłowe w normalnym kodu języka Visual Basic.W poniższym przykładzie elementy w kolekcji, który jest zwracany przez kwerendę w londonCusts4 są instancjami typ anonimowy

    Dim londonCusts4 = From cust In customers
                               Where cust.City = "London"
                               Order By cust.Name Ascending
                               Select Name = cust.Name, Phone = cust.Phone
    
            For Each londonCust In londonCusts4
                Console.WriteLine(londonCust.Name & " " & londonCust.Phone)
            Next
    

    -lub-

  • Zdefiniować nazwany typ, który zawiera określonego pola, które chcesz uwzględnić w wyniku i umożliwia tworzenie i Inicjowanie wystąpień tego typu w Select klauzuli.Opcja ta jest używana, tylko wtedy, gdy trzeba używać pojedynczych badań poza kolekcji, w której są zwracane lub jeśli trzeba przekazać je jako parametry w wywołaniach metody.Typ londonCusts5 w poniższym przykładzie jest IEnumerable (NamePhone).

    Public Class NamePhone
        Public Name As String 
        Public Phone As String 
        ' Additional class elements 
    End Class
    
    Dim londonCusts5 = From cust In customers
                       Where cust.City = "London"
                       Order By cust.Name Ascending
                       Select New NamePhone With {.Name = cust.Name,
                                                  .Phone = cust.Phone}
    

Aby uzyskać więcej informacji o sposobach używania Select klauzuli w języku Visual Basic, zobacz Select — Klauzula (Visual Basic).

Przyłączanie do danych (łączyć i łączyć grupy)

Można łączyć więcej niż jednego źródła danych w From klauzuli na kilka sposobów.Na przykład następujący kod używa dwóch źródeł danych i niejawnie łączy właściwości z obu z nich w wyniku.Kwerenda wybiera studentów, których nazwiska zaczynają się od samogłoski.

Dim vowels() As String = {"A", "E", "I", "O", "U"}
Dim vowelNames = From student In students, vowel In vowels
                 Where student.Last.IndexOf(vowel) = 0
                 Select Name = student.First & " " &
                 student.Last, Initial = vowel
                 Order By Initial

For Each vName In vowelNames
    Console.WriteLine(vName.Initial & ":  " & vName.Name)
Next

[!UWAGA]

Można uruchomić ten kod z listy studentów utworzone w Porady: tworzenie listy elementów.

Join Słowo kluczowe jest równoważne z INNER JOIN w języku SQL.Łączy dwie kolekcje pasujących wartości klucza między elementami w dwóch zbiorach.Kwerenda zwraca całość lub część elementów kolekcji, które mają odpowiadające sobie wartości klucza.Na przykład poniższy kod jest duplikatem działania poprzedniego niejawna łączyć.

Dim vowelNames2 = From student In students
                  Join vowel In vowels
                  On student.Last(0) Equals vowel
                  Select Name = student.First & " " &
                  student.Last, Initial = vowel
                  Order By Initial

Group Joinłączy kolekcji do pojedynczego hierarchicznej kolekcji, tak jak LEFT JOIN w języku SQL.Aby uzyskać więcej informacji, zobacz Join — Klauzula (Visual Basic) i Group Join — Klauzula (Visual Basic).

Grupowanie danych (Grupuj według)

Można dodać Group By klauzuli, aby zgrupować elementy w wyniku kwerendy zgodnie z wartościami pól jednego lub więcej elementów.Na przykład poniższy kod grupy studentów przez rok klasy.

Dim studentsByYear = From student In students
                     Select student
                     Group By year = student.Year
                     Into Classes = Group

For Each yearGroup In studentsByYear
    Console.WriteLine(vbCrLf & "Year: " & yearGroup.year)
    For Each student In yearGroup.Classes
        Console.WriteLine("   " & student.Last & ", " & student.First)
    Next 
Next

Jeśli uruchomi się ten kod przy użyciu listy studentów utworzone w Porady: tworzenie listy elementów, dane wyjściowe z For Each instrukcja jest:

Rok: inny poziom

    Tucker, Michael

    Garcia, Hugo

    Garcia, Debra

    Tucker, Lance

    

Rok: starszy

    Omelczenko, Svetlana

    Michiko, osada

    Fakhouri, Fadi

    Feng, Hanying

    Adams, Terry

    

Rok: studiów

    Rolecki, Tadeusz

    Garcia, Cesarowi

Zmiana poniższym kodem nakazuje lat klasy, a następnie porządkuje studentów w ciągu każdego roku według nazwiska.

Dim studentsByYear2 = From student In students
                      Select student
                      Order By student.Year, student.Last
                      Group By year = student.Year
                      Into Classes = Group

Więcej informacji o Group By, zobacz Group By — Klauzula (Visual Basic).

Zobacz też

Informacje

IEnumerable

Koncepcje

Standardowe operatory zapytań — Omówienie

Podstawowe operacje kwerend LINQ (C#)

Inne zasoby

Wprowadzenie do programu LINQ w Visual Basic

Zapytania (Visual Basic)

LINQ w Visual Basic