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
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
Koncepcje
Standardowe operatory zapytań — Omówienie
Podstawowe operacje kwerend LINQ (C#)