Exemplarische Vorgehensweise: Schreiben von Abfragen in Visual BasicWalkthrough: Writing Queries in Visual Basic

Diese exemplarische Vorgehensweise veranschaulicht, wie Sie Funktionen von Visual Basic verwenden können, schreiben Language-Integrated Query (LINQ)Language-Integrated Query (LINQ) -Abfrageausdrücke.This walkthrough demonstrates how you can use Visual Basic language features to write Language-Integrated Query (LINQ)Language-Integrated Query (LINQ) query expressions. Die exemplarische Vorgehensweise veranschaulicht das Erstellen von Abfragen für eine Liste mit Student-Objekten, die Abfragen ausführen und zum Ändern.The walkthrough demonstrates how to create queries on a list of Student objects, how to run the queries, and how to modify them. Die Abfragen enthalten verschiedene Features, einschließlich lokaler Typrückschluss, Objektinitialisierer und anonyme Typen.The queries incorporate several features including object initializers, local type inference, and anonymous types.

Nach Abschluss dieser exemplarischen Vorgehensweise werden Sie bereit sind, um die Beispiele und Dokumentation der jeweiligen überführen auf LINQLINQ Anbieter, die Sie von Interesse sind.After completing this walkthrough, you will be ready to move on to the samples and documentation for the specific LINQLINQ provider you are interested in. LINQLINQfolgende Anbieter sind LINQ to SQLLINQ to SQL, LINQ to DataSetLINQ to DataSet, und LINQ to XML. providers include LINQ to SQLLINQ to SQL, LINQ to DataSetLINQ to DataSet, and LINQ to XML.

Erstellen eines ProjektsCreate a Project

So erstellen ein KonsolenanwendungsprojektTo create a console application project

  1. Starten Sie Visual Studio.Start Visual Studio.

  2. Zeigen Sie im Menü Datei auf Neu, und klicken Sie dann auf Projekt.On the File menu, point to New, and then click Project.

  3. In der installierte Vorlagen auf Visual Basic.In the Installed Templates list, click Visual Basic.

  4. Klicken Sie in der Liste der Projekttypen auf Konsolenanwendung.In the list of project types, click Console Application. In der Namen Feld Geben Sie einen Namen für das Projekt, und klicken Sie dann auf OK.In the Name box, type a name for the project, and then click OK.

    Ein Projekt wird erstellt.A project is created. Standardmäßig enthält es einen Verweis auf "System.Core.dll".By default, it contains a reference to System.Core.dll. Darüber hinaus die importierte Namespaces auf in der Liste der Seite "Verweise", Projekt-Designer (Visual Basic) enthält die System.Linq Namespace.Also, the Imported namespaces list on the References Page, Project Designer (Visual Basic) includes the System.Linq namespace.

  5. Auf der Seite kompilieren, Projekt-Designer (Visual Basic), sicher, dass Option infer festgelegt ist, um auf.On the Compile Page, Project Designer (Visual Basic), ensure that Option infer is set to On.

Fügen Sie einer In-Memory-Datenquelle hinzuAdd an In-Memory Data Source

Die Datenquelle für die Abfragen in dieser exemplarischen Vorgehensweise wird eine Liste der Student Objekte.The data source for the queries in this walkthrough is a list of Student objects. Jede Student Objekt enthält einen Vornamen, einen Nachnamen enthalten, eine Klasse Jahr und einen akademischen Rang im Student-Text.Each Student object contains a first name, a last name, a class year, and an academic rank in the student body.

So fügen Sie die Datenquelle hinzuTo add the data source

  • Definieren einer Student Klasse, und erstellen Sie eine Liste von Instanzen der Klasse.Define a Student class, and create a list of instances of the class.

    Wichtig

    Der Code zum Definieren der Student Klasse, und erstellen Sie die Liste verwendet in der exemplarischen Vorgehensweise Beispiele finden Sie im wie: Erstellen Sie eine Liste der Elemente.The code needed to define the Student class and create the list used in the walkthrough examples is provided in How to: Create a List of Items. Sie können es von dort kopieren und fügen Sie ihn in das Projekt.You can copy it from there and paste it into your project. Der neue Code ersetzt den Code, der beim Erstellen des Projekts angezeigt.The new code replaces the code that appeared when you created the project.

Den Studenten-Liste einen neuen Studenten hinzuTo add a new student to the students list

  • Befolgen Sie die Muster in den getStudents Methode zum Hinzufügen einer anderen Instanz von der Student Klasse zur Liste.Follow the pattern in the getStudents method to add another instance of the Student class to the list. Hinzufügen der Student werden Objektinitialisierer vorgestellt.Adding the student will introduce you to object initializers. Weitere Informationen finden Sie unter Objektinitialisierer: benannte und anonyme Typen.For more information, see Object Initializers: Named and Anonymous Types.

Erstellen einer AbfrageCreate a Query

Bei der Ausführung erzeugt die Abfrage hinzugefügt, die in diesem Abschnitt eine Liste der Studenten akademischen Rang in der oberen zehn versetzt.When executed, the query added in this section produces a list of the students whose academic rank puts them in the top ten. Da die Abfrage die vollständige wählt Student Objekt jedes Mal, den Typ des Abfrageergebnisses ist IEnumerable(Of Student).Because the query selects the complete Student object each time, the type of the query result is IEnumerable(Of Student). Der Typ der Abfrage wird jedoch in der Regel nicht in Abfragedefinitionen angegeben.However, the type of the query typically is not specified in query definitions. Stattdessen verwendet der Compiler lokaler Typrückschluss, um den Typ zu bestimmen.Instead, the compiler uses local type inference to determine the type. Weitere Informationen finden Sie unter lokalen Typrückschluss.For more information, see Local Type Inference. Die Abfragevariable Bereich currentStudent, dient als einen Verweis auf jede Student Instanz in der Quelle students, und bietet Zugriff auf die Eigenschaften der einzelnen Objekte in students.The query's range variable, currentStudent, serves as a reference to each Student instance in the source, students, providing access to the properties of each object in students.

So erstellen Sie eine einfache AbfrageTo create a simple query

  1. Suchen Sie nach der Stelle in der Main Methode des Projekts, das wie folgt markiert ist:Find the place in the Main method of the project that is marked as follows:

    ' ****Paste query and query execution code from the walkthrough,
    ' ****or any code of your own, here in Main.
    

    Kopieren Sie den folgenden Code aus, und fügen Sie ihn.Copy the following code and paste it in.

    Dim studentQuery = From currentStudent In students
                       Where currentStudent.Rank <= 10
                       Select currentStudent
    
  2. Halten Sie den Mauszeiger über studentQuery in Ihrem Code, um sicherzustellen, dass der Compiler zugewiesene Typ ist IEnumerable(Of Student).Rest the mouse pointer over studentQuery in your code to verify that the compiler-assigned type is IEnumerable(Of Student).

Führen Sie die AbfrageRun the Query

Die Variable studentQuery enthält die Definition der Abfrage, nicht die Ergebnisse des Ausführens der Abfrage.The variable studentQuery contains the definition of the query, not the results of running the query. Ein typische Mechanismus zum Ausführen einer Abfrage ist ein For Each Schleife.A typical mechanism for running a query is a For Each loop. Jedes Element in der zurückgegebenen Sequenz wird über die Schleifeniterationsvariable zugegriffen.Each element in the returned sequence is accessed through the loop iteration variable. Weitere Informationen zur Ausführung von Abfragen finden Sie unter Schreiben Ihrer ersten LINQ-Abfrage.For more information about query execution, see Writing Your First LINQ Query.

Zum Ausführen der AbfrageTo run the query

  1. Fügen Sie die folgenden For Each Schleife unter der Abfrage in Ihrem Projekt.Add the following For Each loop below the query in your project.

    For Each studentRecord In studentQuery
        Console.WriteLine(studentRecord.Last & ", " & studentRecord.First)
    Next
    
  2. Der Mauszeiger über die Loop-Steuerelementvariable studentRecord Angabe des Datentyps angezeigt.Rest the mouse pointer over the loop control variable studentRecord to see its data type. Der Typ des studentRecord wird davon ausgegangen werden Student, da studentQuery gibt eine Auflistung von Student Instanzen.The type of studentRecord is inferred to be Student, because studentQuery returns a collection of Student instances.

  3. Erstellen Sie und führen Sie die Anwendung durch Drücken von STRG + F5.Build and run the application by pressing CTRL+F5. Beachten Sie die Ergebnisse im Konsolenfenster angezeigt.Note the results in the console window.

Ändern der AbfrageModify the Query

Es ist einfacher, Abfrageergebnisse zu prüfen, wenn sie sich in einer bestimmten Reihenfolge befinden.It is easier to scan query results if they are in a specified order. Sie können die zurückgegebene Sequenz basierend auf jedes verfügbare Feld sortieren.You can sort the returned sequence based on any available field.

So sortieren Sie die ErgebnisseTo order the results

  1. Fügen Sie die folgenden Order By Klausel zwischen dem Where Anweisung und die Select -Anweisung der Abfrage.Add the following Order By clause between the Where statement and the Select statement of the query. Die Order By Klausel sortiert die Ergebnisse in alphabetischer Reihenfolge von A bis Z, anhand des Nachnamens der Studenten.The Order By clause will order the results alphabetically from A to Z, according to the last name of each student.

    Order By currentStudent.Last Ascending   
    
  2. Um nach Nachnamen und Vornamen anzuordnen, fügen Sie der Abfrage beide Felder hinzu:To order by last name and then first name, add both fields to the query:

    Order By currentStudent.Last Ascending, currentStudent.First Ascending   
    

    Sie können auch angeben, Descending auf die Reihenfolge von Z bis a.You can also specify Descending to order from Z to A.

  3. Erstellen Sie und führen Sie die Anwendung durch Drücken von STRG + F5.Build and run the application by pressing CTRL+F5. Beachten Sie die Ergebnisse im Konsolenfenster angezeigt.Note the results in the console window.

Lokalen Bezeichner einführen.To introduce a local identifier

  1. Fügen Sie den Code in diesem Abschnitt lokalen Bezeichner im Abfrageausdruck einzuführen.Add the code in this section to introduce a local identifier in the query expression. Der lokale Bezeichner, ein Zwischenergebnis gespeichert werden.The local identifier will hold an intermediate result. Im folgenden Beispiel name ist ein Bezeichner, der eine Verkettung des Studenten enthält vor- und Nachnamen.In the following example, name is an identifier that holds a concatenation of the student's first and last names. Lokaler Bezeichner kann der Einfachheit halber verwendet werden, oder durch Speichern der Ergebnisse eines Ausdrucks, der andernfalls mehrmals berechnet werden, kann dadurch Leistung verbessert.A local identifier can be used for convenience, or it can enhance performance by storing the results of an expression that would otherwise be calculated multiple times.

    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. Erstellen Sie und führen Sie die Anwendung durch Drücken von STRG + F5.Build and run the application by pressing CTRL+F5. Beachten Sie die Ergebnisse im Konsolenfenster angezeigt.Note the results in the console window.

Um ein Feld in der Select-Klausel zu projizieren.To project one field in the Select clause

  1. Fügen Sie der Abfrage und For Each Schleife in diesem Abschnitt zum Erstellen einer Abfrage, die eine Sequenz erzeugt, dessen Elemente unterscheiden sich von der Elemente in der Quelle.Add the query and For Each loop from this section to create a query that produces a sequence whose elements differ from the elements in the source. Im folgenden Beispiel wird die Quelle eine Auflistung von Student Objekte, aber nur ein Element der einzelnen Objekte zurückgegeben wird: der erste Name des Studenten, deren Nachname Garcia.In the following example, the source is a collection of Student objects, but only one member of each object is returned: the first name of students whose last name is Garcia. Da currentStudent.First ist eine Zeichenfolge, die den Datentyp der Sequenz zurückgegebenes studentQuery3 ist IEnumerable(Of String), eine Sequenz von Zeichenfolgen.Because currentStudent.First is a string, the data type of the sequence returned by studentQuery3 is IEnumerable(Of String), a sequence of strings. Wie in früheren Beispielen Geben Sie die Zuweisung von Daten für studentQuery3 bleibt für den Compiler an, mithilfe von lokalem Typrückschluss ermittelt werden.As in earlier examples, the assignment of a data type for studentQuery3 is left for the compiler to determine by using local type inference.

    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. Halten Sie den Mauszeiger über studentQuery3 in Ihrem Code, um sicherzustellen, dass der zugewiesene Typ IEnumerable(Of String).Rest the mouse pointer over studentQuery3 in your code to verify that the assigned type is IEnumerable(Of String).

  3. Erstellen Sie und führen Sie die Anwendung durch Drücken von STRG + F5.Build and run the application by pressing CTRL+F5. Beachten Sie die Ergebnisse im Konsolenfenster angezeigt.Note the results in the console window.

So erstellen Sie einen anonymen Typ in der Select-KlauselTo create an anonymous type in the Select clause

  1. Fügen Sie der Code in diesem Abschnitt, wie anonyme Typen finden in Abfragen verwendet werden.Add the code from this section to see how anonymous types are used in queries. Sie werden in Abfragen verwenden, wenn Sie mehrere Felder aus der Datenquelle verwenden, anstatt die vollständige Datensätze zurückgegeben werden soll (currentStudent Datensätze in den vorherigen Beispielen) oder einzelne Felder (First im vorherigen Abschnitt).You use them in queries when you want to return several fields from the data source rather than complete records (currentStudent records in previous examples) or single fields (First in the preceding section). Anstatt einen neuen benannten Typ, der die Felder enthält, im Resultset enthalten sein sollen, geben Sie die Felder in der Select -Klausel und der Compiler erstellt einen anonymen Typ mit diesen Feldern als Eigenschaften.Instead of defining a new named type that contains the fields you want to include in the result, you specify the fields in the Select clause and the compiler creates an anonymous type with those fields as its properties. Weitere Informationen finden Sie unter Anonyme Typen.For more information, see Anonymous Types.

    Das folgende Beispiel erstellt eine Abfrage, die den Namen und den Rang des Seniors akademischen Rang zwischen 1 und 10, in der Reihenfolge der akademischen Rang ist zurückgibt.The following example creates a query that returns the name and rank of seniors whose academic rank is between 1 and 10, in order of academic rank. In diesem Beispiel wird der Typ des studentQuery4 muss abgeleitet werden, da die Select -Klausel eine Instanz eines anonymen Typs zurückgibt, und ein anonymer Typ hat keinen verwendbaren Namen.In this example, the type of studentQuery4 must be inferred because the Select clause returns an instance of an anonymous type, and an anonymous type has no usable name.

    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. Erstellen Sie und führen Sie die Anwendung durch Drücken von STRG + F5.Build and run the application by pressing CTRL+F5. Beachten Sie die Ergebnisse im Konsolenfenster angezeigt.Note the results in the console window.

Zusätzliche BeispieleAdditional Examples

Nun, dass Sie die Grundlagen verstanden haben, werden im folgenden eine Liste zusätzlicher Beispiele veranschaulichen die Flexibilität und Leistungsfähigkeit von LINQLINQ Abfragen.Now that you understand the basics, the following is a list of additional examples to illustrate the flexibility and power of LINQLINQ queries. Jedes Beispiel ist eine kurze Beschreibung der Funktionsweise vorangestellt.Each example is preceded by a brief description of what it does. Zeigen Sie den Mauszeiger auf die Abfrageergebnisvariable für jede Abfrage der abgeleitete Typ finden Sie unter.Rest the mouse pointer over the query result variable for each query to see the inferred type. Verwenden einer For Each Schleife, um die Ergebnisse zu erzeugen.Use a For Each loop to produce the results.

' 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

Zusätzliche InformationenAdditional Information

Sobald Sie mit den grundlegenden Konzepten der Arbeit mit Abfragen vertraut sind, sind Sie bereit sind, lesen Sie die Dokumentation und Beispiele für den spezifischen Typ der LINQLINQ Anbieter, der Sie interessiert sind:After you are familiar with the basic concepts of working with queries, you are ready to read the documentation and samples for the specific type of LINQLINQ provider that you are interested in:

LINQ to ObjectsLINQ to Objects

LINQ to SQLLINQ to SQL

LINQ to XMLLINQ to XML

LINQ to DataSetLINQ to DataSet

Siehe auchSee Also

Language-Integrated Query (LINQ) (Visual Basic)Language-Integrated Query (LINQ) (Visual Basic)
Getting Started with LINQ in Visual Basic (Erste Schritte mit LINQ in Visual Basic)Getting Started with LINQ in Visual Basic
Lokaler TyprückschlussLocal Type Inference
Objektinitialisierer: Benannte und anonyme TypenObject Initializers: Named and Anonymous Types
Anonyme TypenAnonymous Types
Einführung in LINQ in Visual BasicIntroduction to LINQ in Visual Basic
LINQLINQ
AbfragenQueries