Udostępnij za pośrednictwem


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

  1. Uruchom program Visual Studio.

  2. W menu Plik, wskaż Nowy i kliknij przycisk Projekt.

  3. W Szablonów kliknij, programu Visual Basic.

  4. 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.

  5. 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żna uwagaWaż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

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ę

  1. 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
    
  2. 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ę

  1. 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
    
  2. 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ń.

  3. 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

  1. 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 
    
  2. 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.

  3. Tworzenie i uruchamianie aplikacji przez naciśnięcie klawiszy CTRL + F5.Należy zauważyć, wyniki w oknie konsoli.

Wprowadzenie identyfikatora lokalnego

  1. 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
    
  2. 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

  1. 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
    
  2. Umieść wskaźnik myszy nad studentQuery3 w kodzie, aby sprawdzić, czy przypisany typ to IEnumerable(Of String).

  3. 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

  1. 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
    
  2. 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:

LINQ do obiektów

LINQ to SQL [LINQ to SQL]

LINQ to XML

LINQ to DataSet

Zobacz też

Zadania

Wskazówki: pisanie zapytań w C# (LINQ)

Koncepcje

Uzupełniające zasoby LINQ

Wnioskowanie o typie lokalnym (Visual Basic)

Inicjatory obiektów: typy nazwane i anonimowe (Visual Basic)

Typy anonimowe (Visual Basic)

Wprowadzenie do LINQ w Visual Basic

Inne zasoby

LINQ (zapytania o języku zintegrowanym)

Wprowadzenie do programu LINQ w Visual Basic

LINQ w Visual Basic

Zapytania (Visual Basic)