Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Dieses Thema enthält eine kurze Einführung in Language-Integrated Abfrageausdrücke (LINQ) in Visual Basic sowie typische Vorgänge, die Sie in einer Abfrage ausführen. Weitere Informationen finden Sie in den folgenden Themen:
Einführung in LINQ in Visual Basic
Anleitung: Schreiben von Abfragen in Visual Basic
Angeben der Datenquelle (Von)
In einer LINQ-Abfrage besteht der erste Schritt darin, die Datenquelle anzugeben, die Sie abfragen möchten. Daher kommt die From
Klausel in einer Abfrage immer zuerst. Abfrageoperatoren wählen und gestalten das Ergebnis basierend auf dem Typ der Quelle.
Dim query = From cust In customers
' ...
Die From
Klausel gibt die Datenquelle, customers
und eine Bereichsvariable an. cust
Die Bereichsvariable ist wie eine Schleifeniterationsvariable, mit der Ausnahme, dass in einem Abfrageausdruck keine tatsächliche Iteration auftritt. Wenn die Abfrage ausgeführt wird, oft mit einer For Each
Schleife, dient die Bereichsvariable als Verweis auf jedes aufeinanderfolgende Element in customers
. Da der Compiler den Typ von cust
ableiten kann, müssen Sie ihn nicht explizit angeben. Beispiele für Abfragen, die mit und ohne explizite Eingabe geschrieben wurden, finden Sie unter Typbeziehungen in Abfragevorgängen (Visual Basic).For examples of queries written with and without explicit typeing, see Type Relationships in Query Operations (Visual Basic).
Weitere Informationen zur Verwendung der From
Klausel in Visual Basic finden Sie unter From Clause.
Filtern von Daten (wo)
Wahrscheinlich wendet der am häufigsten verwendete Abfragevorgang einen Filter in Form eines booleschen Ausdrucks an. Die Abfrage gibt dann nur die Elemente zurück, für die der Ausdruck wahr ist. Eine Where
Klausel wird verwendet, um die Filterung durchzuführen. Der Filter gibt an, welche Elemente in der Datenquelle in die resultierende Sequenz aufgenommen werden sollen. Im folgenden Beispiel werden nur die Kunden einbezogen, die eine Adresse in London haben.
Dim londonCusts = From cust In customers
Where cust.City = "London"
' ...
Sie können logische Operatoren wie And
und Or
verwenden, um Filterausdrücke in einer Where
-Klausel zu kombinieren. Wenn Sie beispielsweise nur die Kunden aus London zurückgeben möchten und deren Name Devon lautet, verwenden Sie den folgenden Code:
Where cust.City = "London" And cust.Name = "Devon"
Verwenden Sie den folgenden Code, um Kunden aus London oder Paris zurückzugeben:
Where cust.City = "London" Or cust.City = "Paris"
Weitere Informationen zur Verwendung der Where
Klausel in Visual Basic finden Sie unter Where-Klausel.
Sortieren von Daten (Reihenfolge nach)
Häufig ist es praktisch, zurückgegebene Daten in eine bestimmte Reihenfolge zu sortieren. Die Order By
Klausel bewirkt, dass die Elemente in der zurückgegebenen Sequenz nach einem angegebenen Feld oder Feldern sortiert werden. Die folgende Abfrage sortiert beispielsweise die Ergebnisse basierend auf der Name
Eigenschaft. Da Name
es sich um eine Zeichenfolge handelt, werden die zurückgegebenen Daten alphabetisch sortiert, von A bis Z.
Dim londonCusts1 = From cust In customers
Where cust.City = "London"
Order By cust.Name Ascending
' ...
Um die Ergebnisse in umgekehrter Reihenfolge zu ordnen, verwenden Sie die Order By...Descending
Klausel von Z zu A. Der Standardwert ist Ascending
, wenn weder Ascending
noch Descending
angegeben wird.
Weitere Informationen zur Verwendung der Order By
Klausel in Visual Basic finden Sie unter Order By Clause.
Auswählen von Daten (Select-Klausel)
Die Select
Klausel gibt die Form und den Inhalt der zurückgegebenen Elemente an. Sie können z. B. angeben, ob ihre Ergebnisse aus vollständigen Customer
Objekten, nur einer Customer
Eigenschaft, einer Teilmenge von Eigenschaften, einer Kombination von Eigenschaften aus verschiedenen Datenquellen oder einem neuen Ergebnistyp basierend auf einer Berechnung bestehen. Wenn die Select
Klausel etwas anderes als eine Kopie des Quellelements erzeugt, wird der Vorgang als Projektion bezeichnet.
Um eine Auflistung abzurufen, die aus vollständigen Customer
Objekten besteht, wählen Sie die Bereichsvariable selbst aus:
Dim londonCusts2 = From cust In customers
Where cust.City = "London"
Order By cust.Name Ascending
Select cust
Wenn es sich bei einer Customer
Instanz um ein großes Objekt mit vielen Feldern handelt, und alle, die Sie abrufen möchten, ist der Name, können Sie auswählen cust.Name
, wie im folgenden Beispiel gezeigt. Der lokale Typinschluss erkennt, dass dadurch der Ergebnistyp von einer Auflistung von Customer
Objekten in eine Auflistung von Zeichenfolgen geändert wird.
Dim londonCusts3 = From cust In customers
Where cust.City = "London"
Order By cust.Name Ascending
Select cust.Name
Wenn Sie mehrere Felder aus der Datenquelle auswählen möchten, haben Sie zwei Möglichkeiten:
Geben Sie in der
Select
Klausel die Felder an, die in das Ergebnis eingeschlossen werden sollen. Der Compiler definiert einen anonymen Typ, der diese Felder als Eigenschaften aufweist. Weitere Informationen finden Sie unter Anonyme Typen.Da die zurückgegebenen Elemente im folgenden Beispiel Instanzen eines anonymen Typs sind, können Sie nicht auf den Typ nach Namen an anderer Stelle im Code verweisen. Der vom Compiler festgelegte Name für den Typ enthält Zeichen, die in normalem Visual Basic-Code ungültig sind. Im folgenden Beispiel sind die Elemente in der Auflistung, die von der Abfrage
londonCusts4
zurückgegeben werden, Instanzen eines anonymen Typs.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
-oder-
Definieren Sie einen benannten Typ, der die bestimmten Felder enthält, die Sie in das Ergebnis einbeziehen möchten, und erstellen und initialisieren Sie Instanzen des Typs in der
Select
Klausel. Verwenden Sie diese Option nur, wenn Sie einzelne Ergebnisse außerhalb der Auflistung verwenden müssen, in der sie zurückgegeben werden, oder wenn Sie sie als Parameter in Methodenaufrufen übergeben müssen. Der Typ deslondonCusts5
folgenden Beispiels ist IEnumerable(Of 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}
Weitere Informationen zur Verwendung der Select
Klausel in Visual Basic finden Sie unter Select Clause.
Verknüpfen von Daten (Join- und Group Join-Klausel)
Sie können mehrere Datenquellen in der From
Klausel auf verschiedene Arten kombinieren. Der folgende Code verwendet beispielsweise zwei Datenquellen und kombiniert implizit Eigenschaften aus beiden im Ergebnis. Die Abfrage wählt Kursteilnehmer aus, deren Nachnamen mit einem Vokal beginnen.
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
Hinweis
Sie können diesen Code mit der Liste der Kursteilnehmer ausführen, die in How to: Create a List of Items erstellt wurden.
Das Join
Schlüsselwort entspricht einem INNER JOIN
in SQL. Sie kombiniert zwei Auflistungen basierend auf dem Abgleich von Schlüsselwerten zwischen Elementen in den beiden Auflistungen. Die Abfrage gibt alle oder einen Teil der Auflistungselemente zurück, die übereinstimmende Schlüsselwerte aufweisen. Der folgende Code dupliziert beispielsweise die Aktion der vorherigen impliziten Verknüpfung.
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
kombiniert Sammlungen in einer einzigen hierarchischen Auflistung, genau wie in LEFT JOIN
SQL. Weitere Informationen finden Sie unter Join Clause und Group Join Clause.
Gruppieren von Daten (Group By-Klausel)
Sie können eine Group By
Klausel hinzufügen, um die Elemente in einem Abfrageergebnis nach einem oder mehreren Feldern der Elemente zu gruppieren. Beispielsweise gruppiert der folgende Code Schüler nach Klassenjahr.
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
Wenn Sie diesen Code mithilfe der Liste der Kursteilnehmer ausführen, die in How to: Create a List of Items erstellt wurden, lautet die Ausgabe aus der For Each
Anweisung:
Jahr: Junior
Tucker, Michael
García, Hugo
García, Debra
Tucker, Lance
Jahr: Senior
Omelchenko, Svetlana
Osada, Michiko
Fakhouri, Fadi
Feng, Hanying
Adams, Terry
Jahr: Erstsemester
Mortensen, Sven
García, Cesar
Die im folgenden Code gezeigte Variante sortiert die Klassenjahre und sortiert die Kursteilnehmer dann innerhalb jedes Jahres nach Nachnamen.
Dim studentsByYear2 = From student In students
Select student
Order By student.Year, student.Last
Group By year = student.Year
Into Classes = Group
Weitere Informationen zu Group By
finden Sie unter Group By-Klausel.