Wskazówki: Pisanie zapytań w Visual Basic
W tym instruktażu przedstawiono sposób korzystania funkcjami języka Visual Basic do napisania Zapytanie o języku zintegrowanym (LINQ) kwerendy wyrażeń.Instruktażu przedstawiono sposób tworzenia kwerend na listę obiektów Student, jak uruchamiać je i sposób ich modyfikowania.Kwerendy zawierają kilka funkcji, które były nowe w 2008 r. języka Visual Basic, w tym obiekt inicjatory, wnioskowanie typu lokalnego i typy anonimowe.
Po ukończeniu tego instruktażu, będzie gotowy, aby przejść do przykładów i dokumentację na szczególne LINQ dostawcy są Państwo zainteresowani.LINQproviders include LINQ do SQL, LINQ do DataSet, and LINQ do XML.
Utwórz projekt
Aby utworzyć projekt aplikacji konsoli
Uruchom program Visual Studio.
W menu Plik, wskaż Nowy i kliknij przycisk Projekt.
W Szablonów kliknij, programu Visual Basic.
Na liście typów projektów, kliknij Console Application.W Nazwa wpisz nazwę projektu, a następnie kliknij przycisk OK.
Projekt jest tworzony.Domyślnie zawiera odniesienie do System.Core.dll.Ponadto importowane obszary nazw wystawiać przedmioty w serwisie Strona odwołań, Projektant projektu (Visual Basic) obejmuje System.Linq obszaru nazw.
Na Strona kompilowania, Projektant projektu (Visual Basic), zapewnienia, że wywnioskować opcja jest ustawiona na na.
Dodaj źródło danych w pamięci
Źródło danych dla kwerendy, w tym instruktażu przedstawiono listę Student obiektów.Każdy Student obiekt zawiera imię, nazwisko, rok klasy i academic rangi w studentów.
Aby dodać źródło danych
Definiowanie Student klasy, a następnie utwórz listę wystąpień tej klasy.
Ważne Kod potrzebny do zdefiniowania Student klasy i tworzenie listy używany w instruktażu przedstawiono przykłady w Porady: tworzenie listy elementów.Można skopiować je z niego i wkleić go do projektu.Nowy kod zastępuje kod, który pojawił się podczas tworzenia projektu.
Aby dodać nowy student/uczeń do listy studentów
- Postępuj zgodnie ze wzorcem w getStudents metoda, aby dodać inne wystąpienie programu Student klasy do listy.Dodawanie uczeń podstawowe informacje na inicjatory obiektu.Aby uzyskać więcej informacji, zobacz Inicjatory obiektów: typy nazwane i anonimowe (Visual Basic).
Tworzenie zapytania
Podczas wykonywania kwerendy w tej części dodaje się tworzy listę uczniów, której pozycję akademickich umieszcza je w dziesięciu najlepszych.Ponieważ kwerenda wybiera pełne Student obiektu za każdym razem, typu wyniku kwerendy jest IEnumerable(Of Student).Jednakże typ kwerendy zazwyczaj nie został określony w definicji kwerendy.Zamiast tego kompilator używa lokalnych wnioskowanie do ustalania typu.Aby uzyskać więcej informacji, zobacz Wnioskowanie o typie lokalnym (Visual Basic).Zmienna zakresu kwerendy, currentStudent, służy jako punkt odniesienia do każdego Student wystąpienie w źródle, students, zapewniając dostęp do właściwości każdego obiektu w students.
Aby utworzyć prostą kwerendę
Znaleźć miejsce, w Main metoda projektu, który jest oznaczony jako się następujące zmiany:
' ****Paste query and query execution code from the walkthrough, ' ****or any code of your own, here in Main.
Skopiuj poniższy kod i wklej go w.
Dim studentQuery = From currentStudent In students Where currentStudent.Rank <= 10 Select currentStudent
Umieść wskaźnik myszy nad studentQuery w kodzie, aby sprawdzić, czy jest przypisany przez kompilator typu IEnumerable(Of Student).
Uruchom kwerendę
Zmienna studentQuery zawiera definicję kwerendy, nie wyniki działania kwerendy.Typowy mechanizm wykonywanie kwerendy, jest For Each pętli.Każdy element w sekwencji zwracane jest dostępna za pośrednictwem Zmienna iteracji pętli.Aby uzyskać więcej informacji na temat wykonywania kwerendy, zobacz Pisanie pierwszej kwerendy LINQ (Visual Basic).
Aby uruchomić kwerendę
Dodaj następujący For Each pętli poniżej kwerendy w projekcie.
For Each studentRecord In studentQuery Console.WriteLine(studentRecord.Last & ", " & studentRecord.First) Next
Umieść wskaźnik myszy nad zmienna sterująca pętli studentRecord Aby wyświetlić typ danych.Typ studentRecord się go doszukiwać się Student, bo studentQuery zwraca kolekcję Student wystąpień.
Tworzenie i uruchamianie aplikacji przez naciśnięcie klawiszy CTRL + F5.Należy zauważyć, wyniki w oknie konsoli.
Należy zmodyfikować kwerendę
To ułatwia skanowanie wyniki kwerendy, jeśli są one w określonej kolejności.Można sortować zwracane sekwencji, oparte na dowolnym dostępnym polu.
Do uporządkowania wyników
Dodaj następujący Order By klauzuli między Where instrukcji i Select instrukcja kwerendy.Order By Klauzuli będzie uporządkowania wyników alfabetycznie od A do Z, zgodnie z ostatnią nazwę każdego studenta.
Order By currentStudent.Last Ascending
Do zamówienia przez ostatni następnie imienia i nazwiska, Dodaj oba pola do kwerendy:
Order By currentStudent.Last Ascending, currentStudent.First Ascending
Można również określić Descending do kolejności od Z do A.
Tworzenie i uruchamianie aplikacji przez naciśnięcie klawiszy CTRL + F5.Należy zauważyć, wyniki w oknie konsoli.
Wprowadzenie identyfikatora lokalnego
Dodaj kod w tej sekcji wprowadzenie identyfikatora lokalnego w wyrażeniu kwerendy.Identyfikator lokalny odbędzie się wynik pośredni.W poniższym przykładzie name jest identyfikatorem, który posiada łączenie student imienia i nazwiska.Dla ułatwienia można stosować identyfikatora lokalnego lub go może zwiększyć wydajność dzięki przechowywaniu wyniki wyrażenia, które w przeciwnym razie nalicza się wiele razy.
Dim studentQuery2 = From currentStudent In students Let name = currentStudent.Last & ", " & currentStudent.First Where currentStudent.Year = "Senior" And currentStudent.Rank <= 10 Order By name Ascending Select currentStudent ' If you see too many results, comment out the previous ' For Each loop. For Each studentRecord In studentQuery2 Console.WriteLine(studentRecord.Last & ", " & studentRecord.First) Next
Tworzenie i uruchamianie aplikacji przez naciśnięcie klawiszy CTRL + F5.Należy zauważyć, wyniki w oknie konsoli.
Z jednym polem projektu w klauzuli Select
Dodaj zapytanie i For Each pętli z tej sekcji, aby utworzyć kwerendę, która produkuje sekwencji, w której elementy różnią się od elementów w źródle.W poniższym przykładzie, źródło to kolekcja Student obiekty, ale tylko jeden element członkowski każdego obiektu jest zwracany: imię studentów nazwisku jest Garcia.Ponieważ currentStudent.First jest ciągiem, typ danych sekwencji zwróconej przez studentQuery3 jest IEnumerable(Of String), sekwencja ciągów.Tak jak w przykładach wcześniejszych przydziału danych wpisz dla studentQuery3 pozostaje dla kompilatora określić przy użyciu lokalnego wnioskowanie.
Dim studentQuery3 = From currentStudent In students Where currentStudent.Last = "Garcia" Select currentStudent.First ' If you see too many results, comment out the previous ' For Each loops. For Each studentRecord In studentQuery3 Console.WriteLine(studentRecord) Next
Umieść wskaźnik myszy nad studentQuery3 w kodzie, aby sprawdzić, czy przypisany typ to IEnumerable(Of String).
Tworzenie i uruchamianie aplikacji przez naciśnięcie klawiszy CTRL + F5.Należy zauważyć, wyniki w oknie konsoli.
Aby utworzyć typ anonimowy w klauzuli Select
Dodaj ten kod z tej sekcji, aby wyświetlić typy anonimowi są używane w kwerendach.Używane w kwerendach kiedy chcesz zwrócić kilka pól ze źródła danych, a nie całych rekordów (currentStudent rekordów w poprzednich przykładach) lub pojedynczego pola (First w poprzedniej sekcji).Definiowanie nowego typu nazwanego, zawierająca pola mają zostać uwzględnione w wynikach, a nie można określić pola, które w Select klauzuli i kompilator tworzy typ anonimowy z tych pól, ponieważ jego właściwości. Aby uzyskać więcej informacji, zobacz Typy anonimowe (Visual Basic).
Poniższy przykład tworzy kwerendę, która zwraca nazwę nazwisko) i pozycja liczby osób starszych, której pozycję akademickich się między 1 a 10, w kolejności akademickich.W tym przykładzie typ studentQuery4 należy przyjąć wniosek, ponieważ Select klauzula Zwraca wystąpienie typ anonimowy, a typ anonimowy nie ma można używać nazwy.
Dim studentQuery4 = From currentStudent In students Where currentStudent.Year = "Senior" And currentStudent.Rank <= 10 Order By currentStudent.Rank Ascending Select currentStudent.First, currentStudent.Last, currentStudent.Rank ' If you see too many results, comment out the previous ' For Each loops. For Each studentRecord In studentQuery4 Console.WriteLine(studentRecord.Last & ", " & studentRecord.First & ": " & studentRecord.Rank) Next
Tworzenie i uruchamianie aplikacji przez naciśnięcie klawiszy CTRL + F5.Należy zauważyć, wyniki w oknie konsoli.
Dodatkowe przykłady
Teraz, w zrozumieniu podstaw poniżej znajduje się lista dodatkowe przykłady ilustrujące elastyczność i moc LINQ kwerend.Każdy przykład jest poprzedzony przez krótki opis jego działania.Wskaźnik myszy nad zmiennej wynik kwerendy dla każdej kwerendy zobaczyć typu wywnioskowane element. Użycie For Each pętli w celu uzyskania wyników.
' Find all students who are seniors.
Dim q1 = From currentStudent In students
Where currentStudent.Year = "Senior"
Select currentStudent
' Write a For Each loop to execute the query.
For Each q In q1
Console.WriteLine(q.First & " " & q.Last)
Next
' Find all students with a first name beginning with "C".
Dim q2 = From currentStudent In students
Where currentStudent.First.StartsWith("C")
Select currentStudent
' Find all top ranked seniors (rank < 40).
Dim q3 = From currentStudent In students
Where currentStudent.Rank < 40 And currentStudent.Year = "Senior"
Select currentStudent
' Find all seniors with a lower rank than a student who
' is not a senior.
Dim q4 = From student1 In students, student2 In students
Where student1.Year = "Senior" And student2.Year <> "Senior" And
student1.Rank > student2.Rank
Select student1
Distinct
' Retrieve the full names of all students, sorted by last name.
Dim q5 = From currentStudent In students
Order By currentStudent.Last
Select Name = currentStudent.First & " " & currentStudent.Last
' Determine how many students are ranked in the top 20.
Dim q6 = Aggregate currentStudent In students
Where currentStudent.Rank <= 20
Into Count()
' Count the number of different last names in the group of students.
Dim q7 = Aggregate currentStudent In students
Select currentStudent.Last
Distinct
Into Count()
' Create a list box to show the last names of students.
Dim lb As New System.Windows.Forms.ListBox
Dim q8 = From currentStudent In students
Order By currentStudent.Last
Select currentStudent.Last Distinct
For Each nextName As String In q8
lb.Items.Add(nextName)
Next
' Find every process that has a lowercase "h", "l", or "d" in its name.
Dim letters() As String = {"h", "l", "d"}
Dim q9 = From proc In System.Diagnostics.Process.GetProcesses,
letter In letters
Where proc.ProcessName.Contains(letter)
Select proc
For Each proc In q9
Console.WriteLine(proc.ProcessName & ", " & proc.WorkingSet64)
Next
Dodatkowe informacje
Po są zaznajomieni z podstawowych pojęciach dotyczących pracy z kwerendami, można przystąpić do odczytania dokumentacja i przykłady dla określonego typu LINQ dostawcy, który Cię interesuje:
Zobacz też
Zadania
Wskazówki: pisanie zapytań w C# (LINQ)
Koncepcje
Wnioskowanie o typie lokalnym (Visual Basic)
Inicjatory obiektów: typy nazwane i anonimowe (Visual Basic)
Wprowadzenie do LINQ w Visual Basic
Inne zasoby
LINQ (zapytania o języku zintegrowanym)