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.
Language-Integrated Query (LINQ) fügt Visual Basic Abfragefunktionen hinzu und bietet einfache und leistungsstarke Funktionen, wenn Sie mit allen Arten von Daten arbeiten. Anstatt eine Abfrage an eine zu verarbeitende Datenbank zu senden oder mit unterschiedlicher Abfragesyntax für jeden Datentyp zu arbeiten, den Sie durchsuchen, führt LINQ Abfragen als Teil der Visual Basic-Sprache ein. Sie verwendet unabhängig vom Datentyp eine einheitliche Syntax.
LINQ ermöglicht es Ihnen, Daten aus einer SQL Server-Datenbank, XML, Speicherarrays und Auflistungen, ADO.NET Datasets oder einer anderen Remote- oder lokalen Datenquelle abzufragen, die LINQ unterstützt. Sie können all dies mit allgemeinen Visual Basic-Sprachelementen tun. Da Ihre Abfragen in der Visual Basic-Sprache geschrieben werden, werden die Abfrageergebnisse als stark typierte Objekte zurückgegeben. Diese Objekte unterstützen IntelliSense, wodurch Sie Code schneller schreiben und Fehler in Ihren Abfragen zur Kompilierungszeit statt zur Laufzeit abfangen können. LINQ-Abfragen können als Quelle zusätzlicher Abfragen verwendet werden, um Ergebnisse zu verfeinern. Sie können auch an Steuerelemente gebunden werden, damit Benutzer Ihre Abfrageergebnisse ganz einfach anzeigen und ändern können.
Das folgende Codebeispiel zeigt beispielsweise eine LINQ-Abfrage, die eine Liste von Kunden aus einer Auflistung zurückgibt und sie basierend auf ihrem Standort gruppiert.
' Obtain a list of customers.
Dim customers As List(Of Customer) = GetCustomers()
' Return customers that are grouped based on country.
Dim countries = From cust In customers
Order By cust.Country, cust.City
Group By CountryName = cust.Country
Into CustomersInCountry = Group, Count()
Order By CountryName
' Output the results.
For Each country In countries
Debug.WriteLine(country.CountryName & " count=" & country.Count)
For Each customer In country.CustomersInCountry
Debug.WriteLine(" " & customer.CompanyName & " " & customer.City)
Next
Next
' Output:
' Canada count=2
' Contoso, Ltd Halifax
' Fabrikam, Inc. Vancouver
' United States count=1
' Margie's Travel Redmond
Ausführen der Beispiele
Um die Beispiele in der Einführung und in der Struktur eines LINQ Query-Abschnitts auszuführen, schließen Sie den folgenden Code ein, der Listen von Kunden und Bestellungen zurückgibt.
' Return a list of customers.
Private Function GetCustomers() As List(Of Customer)
Return New List(Of Customer) From
{
New Customer With {.CustomerID = 1, .CompanyName = "Contoso, Ltd", .City = "Halifax", .Country = "Canada"},
New Customer With {.CustomerID = 2, .CompanyName = "Margie's Travel", .City = "Redmond", .Country = "United States"},
New Customer With {.CustomerID = 3, .CompanyName = "Fabrikam, Inc.", .City = "Vancouver", .Country = "Canada"}
}
End Function
' Return a list of orders.
Private Function GetOrders() As List(Of Order)
Return New List(Of Order) From
{
New Order With {.CustomerID = 1, .Amount = "200.00"},
New Order With {.CustomerID = 3, .Amount = "600.00"},
New Order With {.CustomerID = 1, .Amount = "300.00"},
New Order With {.CustomerID = 2, .Amount = "100.00"},
New Order With {.CustomerID = 3, .Amount = "800.00"}
}
End Function
' Customer Class.
Private Class Customer
Public Property CustomerID As Integer
Public Property CompanyName As String
Public Property City As String
Public Property Country As String
End Class
' Order Class.
Private Class Order
Public Property CustomerID As Integer
Public Property Amount As Decimal
End Class
LINQ-Anbieter
Ein LINQ-Anbieter ordnet Ihre Visual Basic LINQ-Abfragen der abgefragten Datenquelle zu. Wenn Sie eine LINQ-Abfrage schreiben, übernimmt der Anbieter diese Abfrage und übersetzt sie in Befehle, die die Datenquelle ausführen kann. Der Anbieter konvertiert auch Daten aus der Quelle in die Objekte, aus denen ihr Abfrageergebnis besteht. Schließlich konvertiert sie Objekte in Daten, wenn Sie Aktualisierungen an die Datenquelle senden.
Visual Basic enthält die folgenden LINQ-Anbieter.
Anbieter | BESCHREIBUNG |
---|---|
LINQ to Objects | Mit dem LINQ to Objects-Anbieter können Sie Speicherauflistungen und Arrays abfragen. Wenn ein Objekt entweder die IEnumerable- oder die IEnumerable<T>-Schnittstelle unterstützt, können Sie es mit dem LINQ to Objects-Anbieter abfragen. Sie können den LINQ to Objects-Anbieter aktivieren, indem Sie den Namespace System.Linq importieren, der standardmäßig für alle Visual Basic-Projekte importiert wird. Weitere Informationen zum LINQ to Objects-Anbieter finden Sie unter LINQ to Objects. |
LINQ to SQL | Mit dem LINQ to SQL-Anbieter können Sie Daten in einer SQL Server-Datenbank abfragen und ändern. Dies erleichtert das Zuordnen des Objektmodells für eine Anwendung zu den Tabellen und Objekten in einer Datenbank. Visual Basic erleichtert die Arbeit mit LINQ to SQL, indem der Objektrelational-Designer (O/R Designer) eingeschlossen wird. Dieser Designer wird verwendet, um ein Objektmodell in einer Anwendung zu erstellen, das Objekten in einer Datenbank zugeordnet ist. Der O/R-Designer bietet auch Funktionen zum Zuordnen gespeicherter Prozeduren und Funktionen zum DataContext Objekt, das die Kommunikation mit der Datenbank verwaltet und den Zustand für optimistische Parallelitätsprüfungen speichert. Weitere Informationen zum LINQ to SQL-Anbieter finden Sie unter LINQ to SQL. Weitere Informationen zum objektrelationalen Designer finden Sie unter LINQ to SQL Tools in Visual Studio. |
LINQ to XML | Mit dem LINQ to XML-Anbieter können Sie XML abfragen und ändern. Sie können XML im Arbeitsspeicher ändern oder XML aus einer Datei laden und in eine Datei speichern. Darüber hinaus ermöglicht der LINQ to XML-Anbieter XML-Literale und XML-Achseneigenschaften, mit denen Sie XML direkt in Ihrem Visual Basic-Code schreiben können. Weitere Informationen finden Sie unter XML. |
LINQ to DataSet | Mit dem LINQ to DataSet-Anbieter können Sie Daten in einem ADO.NET-Dataset abfragen und aktualisieren. Sie können die Leistungsfähigkeit von LINQ zu Anwendungen hinzufügen, die Datasets verwenden, um Ihre Funktionen zum Abfragen, Aggregieren und Aktualisieren der Daten in Ihrem Dataset zu vereinfachen und zu erweitern. Weitere Informationen finden Sie unter LINQ to DataSet. |
Struktur einer LINQ-Abfrage
Eine LINQ-Abfrage, die häufig als Abfrageausdruck bezeichnet wird, besteht aus einer Kombination aus Abfrageklauseln, die die Datenquellen und Iterationsvariablen für die Abfrage identifizieren. Ein Abfrageausdruck kann auch Anweisungen zum Sortieren, Filtern, Gruppieren und Verknüpfen oder Berechnungen enthalten, die auf die Quelldaten angewendet werden sollen. Die Syntax des Abfrageausdrucks ähnelt der Syntax von SQL; Daher finden Sie möglicherweise einen Großteil der vertrauten Syntax.
Ein Abfrageausdruck beginnt mit einer From
Klausel. Diese Klausel identifiziert die Quelldaten für eine Abfrage und die Variablen, die verwendet werden, um auf jedes Element der Quelldaten einzeln zu verweisen. Diese Variablen werden als Bereichsvariablen oder Iterationsvariablen bezeichnet. Die From
Klausel ist für eine Abfrage erforderlich, mit Ausnahme von Aggregate
Abfragen, bei denen die From
Klausel optional ist. Nachdem der Umfang und die Quelle der Abfrage in den From
- oder Aggregate
-Klauseln identifiziert wurden, können Sie eine beliebige Kombination von Abfrageklauseln verwenden, um die Abfrage zu verfeinern. Ausführliche Informationen zu Abfrageklauseln finden Sie weiter unten in diesem Thema unter Visual Basic LINQ-Abfrageoperatoren. Die folgende Abfrage identifiziert beispielsweise eine Quellauflistung von Kundendaten als customers
Variable und eine Iterationsvariable namens cust
.
Dim customers = GetCustomers()
Dim queryResults = From cust In customers
For Each result In queryResults
Debug.WriteLine(result.CompanyName & " " & result.Country)
Next
' Output:
' Contoso, Ltd Canada
' Margie's Travel United States
' Fabrikam, Inc. Canada
Dieses Beispiel ist eine gültige Abfrage selbst; Die Abfrage wird jedoch wesentlich leistungsstärker, wenn Sie weitere Abfrageklauseln hinzufügen, um das Ergebnis zu verfeinern. Sie können z. B. eine Where
Klausel hinzufügen, um das Ergebnis nach einem oder mehreren Werten zu filtern. Abfrageausdrücke sind eine einzelne Codezeile; Sie können einfach zusätzliche Abfrageklauseln an das Ende der Abfrage anfügen. Sie können eine Abfrage über mehrere Textzeilen aufbrechen, um die Lesbarkeit zu verbessern, indem Sie das Zeilenfortsetzungszeichen (_) verwenden. Das folgende Codebeispiel zeigt ein Beispiel für eine Abfrage, die eine Where
Klausel enthält.
Dim queryResults = From cust In customers
Where cust.Country = "Canada"
Eine weitere leistungsstarke Abfrageklausel ist die Select
Klausel, mit der Sie nur ausgewählte Felder aus der Datenquelle zurückgeben können. LINQ-Abfragen geben aufzählbare Auflistungen stark typierter Objekte zurück. Eine Abfrage kann eine Sammlung anonymer Typen oder benannter Typen zurückgeben. Sie können die Select
Klausel verwenden, um nur ein einzelnes Feld aus der Datenquelle zurückzugeben. Wenn Sie dies tun, entspricht der Typ der zurückgegebenen Sammlung dem Typ des einzelnen Felds. Sie können die Select
Klausel auch verwenden, um mehrere Felder aus der Datenquelle zurückzugeben. Wenn Sie dies tun, ist der Typ der zurückgegebenen Auflistung ein neuer anonymer Typ. Sie können auch die von der Abfrage zurückgegebenen Felder mit den Feldern eines angegebenen benannten Typs abgleichen. Das folgende Codebeispiel zeigt einen Abfrageausdruck, der eine Auflistung anonymer Typen zurückgibt, die Elemente mit Daten aus den ausgewählten Feldern aus der Datenquelle aufgefüllt haben.
Dim queryResults = From cust In customers
Where cust.Country = "Canada"
Select cust.CompanyName, cust.Country
LINQ-Abfragen können auch verwendet werden, um mehrere Datenquellen zu kombinieren und ein einzelnes Ergebnis zurückzugeben. Dies kann mit einer oder mehreren From
Klauseln oder mithilfe der Join
- oder Group Join
-Abfrageklauseln erfolgen. Das folgende Codebeispiel zeigt einen Abfrageausdruck, der Kunden- und Bestelldaten kombiniert und eine Sammlung anonymer Typen zurückgibt, die Kunden- und Bestelldaten enthalten.
Dim customers = GetCustomers()
Dim orders = GetOrders()
Dim queryResults = From cust In customers, ord In orders
Where cust.CustomerID = ord.CustomerID
Select cust, ord
For Each result In queryResults
Debug.WriteLine(result.ord.Amount & " " & result.ord.CustomerID & " " & result.cust.CompanyName)
Next
' Output:
' 200.00 1 Contoso, Ltd
' 300.00 1 Contoso, Ltd
' 100.00 2 Margie's Travel
' 600.00 3 Fabrikam, Inc.
' 800.00 3 Fabrikam, Inc.
Mit der Group Join
Klausel können Sie ein hierarchisches Abfrageergebnis erstellen, das eine Auflistung von Kundenobjekten enthält. Jedes Kundenobjekt verfügt über eine Eigenschaft, die eine Auflistung aller Bestellungen für diesen Kunden enthält. Das folgende Codebeispiel zeigt einen Abfrageausdruck, der Kunden- und Bestelldaten als hierarchisches Ergebnis kombiniert und eine Auflistung anonymer Typen zurückgibt. Die Abfrage gibt einen Typ zurück, der eine CustomerOrders
Eigenschaft enthält, die eine Sammlung von Bestelldaten für den Kunden enthält. Sie enthält auch eine OrderTotal
Eigenschaft, die die Gesamtsumme aller Bestellungen für diesen Kunden enthält. (Diese Abfrage entspricht einem LEFT OUTER JOIN.)
Dim customers = GetCustomers()
Dim orders = GetOrders()
Dim queryResults = From cust In customers
Group Join ord In orders On
cust.CustomerID Equals ord.CustomerID
Into CustomerOrders = Group,
OrderTotal = Sum(ord.Amount)
Select cust.CompanyName, cust.CustomerID,
CustomerOrders, OrderTotal
For Each result In queryResults
Debug.WriteLine(result.OrderTotal & " " & result.CustomerID & " " & result.CompanyName)
For Each ordResult In result.CustomerOrders
Debug.WriteLine(" " & ordResult.Amount)
Next
Next
' Output:
' 500.00 1 Contoso, Ltd
' 200.00
' 300.00
' 100.00 2 Margie's Travel
' 100.00
' 1400.00 3 Fabrikam, Inc.
' 600.00
' 800.00
Es gibt mehrere zusätzliche LINQ-Abfrageoperatoren, mit denen Sie leistungsstarke Abfrageausdrücke erstellen können. Im nächsten Abschnitt dieses Themas werden die verschiedenen Abfrageklauseln erläutert, die Sie in einen Abfrageausdruck einschließen können. Ausführliche Informationen zu Visual Basic-Abfrageklauseln finden Sie unter "Abfragen".
Visual Basic LINQ-Abfrageoperatoren
Die Klassen im System.Linq Namespace und die anderen Namespaces, die LINQ-Abfragen unterstützen, umfassen Methoden, die Sie aufrufen können, um Abfragen basierend auf den Anforderungen Ihrer Anwendung zu erstellen und zu verfeinern. Visual Basic enthält Schlüsselwörter für die folgenden allgemeinen Abfrageklauseln. Ausführliche Informationen zu Visual Basic-Abfrageklauseln finden Sie unter "Abfragen".
From-Klausel
Entweder eine From
Klausel oder eine Aggregate
Klausel ist erforderlich, um eine Abfrage zu beginnen. Eine From
Klausel gibt eine Quellauflistung und eine Iterationsvariable für eine Abfrage an. Beispiel:
' Returns the company name for all customers for which
' the Country is equal to "Canada".
Dim names = From cust In customers
Where cust.Country = "Canada"
Select cust.CompanyName
Select-Klausel
Wahlfrei. Eine Select
Klausel deklariert eine Reihe von Iterationsvariablen für eine Abfrage. Beispiel:
' Returns the company name and ID value for each
' customer as a collection of a new anonymous type.
Dim customerList = From cust In customers
Select cust.CompanyName, cust.CustomerID
Wenn keine Select
-Klausel angegeben ist, bestehen die Iterationsvariablen für die Abfrage aus den Iterationsvariablen, die durch die From
- oder Aggregate
-Klausel angegeben wurden.
WHERE-Klausel
Wahlfrei. Eine Where
Klausel gibt eine Filterbedingung für eine Abfrage an. Beispiel:
' Returns all product names for which the Category of
' the product is "Beverages".
Dim names = From product In products
Where product.Category = "Beverages"
Select product.Name
Order By-Klausel
Wahlfrei. Eine Order By
Klausel gibt die Sortierreihenfolge für Spalten in einer Abfrage an. Beispiel:
' Returns a list of books sorted by price in
' ascending order.
Dim titlesAscendingPrice = From b In books
Order By b.price
Join-Klausel
Wahlfrei. Eine Join
-Klausel fasst zwei Auflistungen zu einer einzelnen Auflistung zusammen. Beispiel:
' Returns a combined collection of all of the
' processes currently running and a descriptive
' name for the process taken from a list of
' descriptive names.
Dim processes = From proc In Process.GetProcesses
Join desc In processDescriptions
On proc.ProcessName Equals desc.ProcessName
Select proc.ProcessName, proc.Id, desc.Description
Group By-Klausel
Wahlfrei. Eine Group By
Klausel gruppiert die Elemente eines Abfrageergebnisses. Sie kann verwendet werden, um Aggregatfunktionen auf jede Gruppe anzuwenden. Beispiel:
' Returns a list of orders grouped by the order date
' and sorted in ascending order by the order date.
Dim orderList = From order In orders
Order By order.OrderDate
Group By OrderDate = order.OrderDate
Into OrdersByDate = Group
Gruppenbeitrittsklausel
Wahlfrei. Eine Group Join
Klausel kombiniert zwei Auflistungen in einer einzigen hierarchischen Auflistung. Beispiel:
' Returns a combined collection of customers and
' customer orders.
Dim customerList = From cust In customers
Group Join ord In orders On
cust.CustomerID Equals ord.CustomerID
Into CustomerOrders = Group,
TotalOfOrders = Sum(ord.Amount)
Select cust.CompanyName, cust.CustomerID,
CustomerOrders, TotalOfOrders
Aggregate-Klausel
Zum Starten einer Abfrage ist entweder eine Aggregate
Klausel oder eine From
Klausel erforderlich. Eine Aggregate
Klausel wendet eine oder mehrere Aggregatfunktionen auf eine Auflistung an. Sie können beispielsweise die Aggregate
Klausel verwenden, um eine Summe für alle von einer Abfrage zurückgegebenen Elemente zu berechnen, wie im folgenden Beispiel gezeigt.
' Returns the sum of all order amounts.
Dim orderTotal = Aggregate order In orders
Into Sum(order.Amount)
Sie können die Aggregate
Klausel auch verwenden, um eine Abfrage zu ändern. Sie können beispielsweise die Aggregate
Klausel verwenden, um eine Berechnung für eine verknüpfte Abfrageauflistung auszuführen. Beispiel:
' Returns the customer company name and largest
' order amount for each customer.
Dim customerMax = From cust In customers
Aggregate order In cust.Orders
Into MaxOrder = Max(order.Amount)
Select cust.CompanyName, MaxOrder
Let-Klausel
Wahlfrei. Eine Let
Klausel berechnet einen Wert und weist ihn einer neuen Variablen in der Abfrage zu. Beispiel:
' Returns a list of products with a calculation of
' a ten percent discount.
Dim discountedProducts = From prod In products
Let Discount = prod.UnitPrice * 0.1
Where Discount >= 50
Select prod.Name, prod.UnitPrice, Discount
Einzigartige Klausel
Wahlfrei. Eine Distinct
Klausel schränkt die Werte der aktuellen Iterationsvariablen ein, um doppelte Werte in Abfrageergebnissen zu beseitigen. Beispiel:
' Returns a list of cities with no duplicate entries.
Dim cities = From item In customers
Select item.City
Distinct
Skip-Klausel
Wahlfrei. Eine Skip
Klausel umgeht eine angegebene Anzahl von Elementen in einer Auflistung und gibt dann die verbleibenden Elemente zurück. Beispiel:
' Returns a list of customers. The first 10 customers
' are ignored and the remaining customers are
' returned.
Dim customerList = From cust In customers
Skip 10
SkipWhile-Klausel
Wahlfrei. Eine Skip While
Klausel umgeht Elemente in einer Auflistung, solange eine angegebene Bedingung besteht true
, und gibt dann die verbleibenden Elemente zurück. Beispiel:
' Returns a list of customers. The query ignores all
' customers until the first customer for whom
' IsSubscriber returns false. That customer and all
' remaining customers are returned.
Dim customerList = From cust In customers
Skip While IsSubscriber(cust)
Take-Klausel
Wahlfrei. Eine Take
Klausel gibt eine angegebene Anzahl zusammenhängender Elemente vom Anfang einer Auflistung zurück. Beispiel:
' Returns the first 10 customers.
Dim customerList = From cust In customers
Take 10
TakeWhile-Klausel
Wahlfrei. Eine Take While
Klausel enthält Elemente in einer Auflistung, solange eine angegebene Bedingung vorhanden ist true
und die verbleibenden Elemente umgangen werden. Beispiel:
' Returns a list of customers. The query returns
' customers until the first customer for whom
' HasOrders returns false. That customer and all
' remaining customers are ignored.
Dim customersWithOrders = From cust In customers
Order By cust.Orders.Count Descending
Take While HasOrders(cust)
Verwenden Sie zusätzliche LINQ-Abfragefeatures
Sie können weitere LINQ-Abfragefeatures verwenden, indem Sie die von LINQ bereitgestellten Member des Enumerable-Typs und des Queryable-Typs aufrufen. Sie können diese zusätzlichen Funktionen verwenden, indem Sie einen bestimmten Abfrageoperator für das Ergebnis eines Abfrageausdrucks aufrufen. Im folgenden Beispiel wird beispielsweise die Enumerable.Union Methode verwendet, um die Ergebnisse von zwei Abfragen in einem Abfrageergebnis zu kombinieren. Sie verwendet die Enumerable.ToList Methode, um das Abfrageergebnis als generische Liste zurückzugeben.
Public Function GetAllCustomers() As List(Of Customer)
Dim customers1 = From cust In domesticCustomers
Dim customers2 = From cust In internationalCustomers
Dim customerList = customers1.Union(customers2)
Return customerList.ToList()
End Function
Ausführliche Informationen zu zusätzlichen LINQ-Funktionen finden Sie unter "Übersicht über Standardabfrageoperatoren".
Herstellen einer Verbindung mit einer Datenbank mithilfe von LINQ to SQL
In Visual Basic identifizieren Sie die SQL Server-Datenbankobjekte, z. B. Tabellen, Ansichten und gespeicherte Prozeduren, auf die Sie mithilfe einer LINQ to SQL-Datei zugreifen möchten. Eine LINQ to SQL-Datei hat die Dateierweiterung .dbml.
Wenn Sie über eine gültige Verbindung mit einer SQL Server-Datenbank verfügen, können Sie ihrem Projekt eine LINQ to SQL Classes-Elementvorlage hinzufügen. Dadurch wird der objektrelationale Designer (O/R-Designer) angezeigt. Mit dem O/R-Designer können Sie die Elemente, auf die Sie im Code zugreifen möchten, aus dem Server-Explorer-Datenbank-Explorer/ auf die Designeroberfläche ziehen. Die LINQ to SQL-Datei fügt Ihrem Projekt ein DataContext Objekt hinzu. Dieses Objekt enthält Eigenschaften und Auflistungen für die Tabellen und Ansichten, auf die Sie zugreifen möchten, sowie Methoden für die gespeicherten Prozeduren, auf die Sie zugreifen möchten. Nachdem Sie Ihre Änderungen an der LINQ to SQL-Datei (DBML) gespeichert haben, können Sie auf diese Objekte in Ihrem Code zugreifen, indem Sie auf das DataContext Objekt verweisen, das vom O/R-Designer definiert wird. Das DataContext Objekt für Ihr Projekt wird basierend auf dem Namen der LINQ to SQL-Datei benannt. Eine LINQ to SQL-Datei mit dem Namen Northwind.dbml erstellt beispielsweise ein Objekt DataContext mit dem Namen NorthwindDataContext
.
Beispiele mit schrittweisen Anleitungen finden Sie unter How to: Query a Database and How to: Call a Stored Procedure.
Visual Basic-Features, die LINQ unterstützen
Visual Basic enthält weitere wichtige Features, die LINQ einfach nutzen und die Menge an Code reduzieren, den Sie schreiben müssen, um LINQ-Abfragen auszuführen. Dazu gehören folgende:
Anonyme Typen, mit denen Sie einen neuen Typ basierend auf einem Abfrageergebnis erstellen können.
Implizit eingegebene Variablen, mit denen Sie einen Typ zurückstellen können und der Compiler den Typ basierend auf dem Abfrageergebnis ableiten lässt.
Erweiterungsmethoden, mit denen Sie einen vorhandenen Typ mit Ihren eigenen Methoden erweitern können, ohne den Typ selbst zu ändern.
Ausführliche Informationen finden Sie unter Visual Basic-Features, die LINQ unterstützen.
Verzögerte und sofortige Abfrageausführung
Die Abfrageausführung unterscheidet sich von der Erstellung einer Abfrage. Nachdem eine Abfrage erstellt wurde, wird die Ausführung durch einen separaten Mechanismus ausgelöst. Eine Abfrage kann ausgeführt werden, sobald sie definiert ist (sofortige Ausführung), oder die Definition kann gespeichert werden, und die Abfrage kann später ausgeführt werden (verzögerte Ausführung).
Wenn Sie eine Abfrage erstellen, wird die Abfrage selbst standardmäßig nicht sofort ausgeführt. Stattdessen wird die Abfragedefinition in der Variablen gespeichert, die verwendet wird, um auf das Abfrageergebnis zu verweisen. Wenn später im Code auf die Abfrageergebnisvariable zugegriffen wird, z. B. in einer For…Next
Schleife, wird die Abfrage ausgeführt. Dieser Prozess wird als verzögerte Ausführung bezeichnet.
Abfragen können auch ausgeführt werden, wenn sie definiert sind, was als sofortige Ausführung bezeichnet wird. Sie können die sofortige Ausführung auslösen, indem Sie eine Methode anwenden, die Zugriff auf einzelne Elemente des Abfrageergebnisses erfordert. Dies kann das Ergebnis einer Aggregatfunktion sein, wie z. B. Count
, Sum
, Average
, Min
oder Max
. Weitere Informationen zu Aggregatfunktionen finden Sie unter "Aggregate Clause".
Die Verwendung der Methoden ToList
oder ToArray
erzwingt auch die sofortige Ausführung. Dies kann nützlich sein, wenn Sie die Abfrage sofort ausführen und die Ergebnisse zwischenspeichern möchten. Weitere Informationen zu diesen Methoden finden Sie unter Konvertieren von Datentypen.
Weitere Informationen zur Abfrageausführung finden Sie unter Writing Your First LINQ Query.
XML in Visual Basic
Zu den XML-Features in Visual Basic gehören XML-Literale und XML-Achseneigenschaften, mit denen Sie XML in Ihrem Code ganz einfach erstellen, darauf zugreifen, abfragen und ändern können. Mit XML-Literalen können Sie XML direkt in Ihren Code schreiben. Der Visual Basic-Compiler behandelt den XML-Code als datenobjekt der ersten Klasse.
Das folgende Codebeispiel zeigt, wie Sie ein XML-Element erstellen, auf seine Unterelemente und Attribute zugreifen und den Inhalt des Elements mithilfe von LINQ abfragen.
' Place Imports statements at the top of your program.
Imports <xmlns:ns="http://SomeNamespace">
Module Sample1
Sub SampleTransform()
' Create test by using a global XML namespace prefix.
Dim contact =
<ns:contact>
<ns:name>Patrick Hines</ns:name>
<ns:phone ns:type="home">206-555-0144</ns:phone>
<ns:phone ns:type="work">425-555-0145</ns:phone>
</ns:contact>
Dim phoneTypes =
<phoneTypes>
<%= From phone In contact.<ns:phone>
Select <type><%= phone.@ns:type %></type>
%>
</phoneTypes>
Console.WriteLine(phoneTypes)
End Sub
End Module
Weitere Informationen finden Sie unter XML.
Verwandte Ressourcen
Thema | BESCHREIBUNG |
---|---|
XML | Beschreibt die XML-Features in Visual Basic, die abgefragt werden können und die es Ihnen ermöglichen, XML als Erstklassige Datenobjekte in Den Visual Basic-Code einzuschließen. |
Fragen | Stellt Referenzinformationen zu den Abfrageklauseln bereit, die in Visual Basic verfügbar sind. |
LINQ (Language-Integrated Abfrage) | Enthält allgemeine Informationen, Programmieranleitungen und Beispiele für LINQ. |
LINQ to SQL | Enthält allgemeine Informationen, Programmieranleitungen und Beispiele für LINQ to SQL. |
LINQ to Objects | Enthält allgemeine Informationen, Programmieranleitungen und Beispiele für LINQ to Objects. |
LINQ to ADO.NET (Portalseite) | Enthält Links zu allgemeinen Informationen, Programmieranleitungen und Beispielen für LINQ to ADO.NET. |
LINQ to XML | Enthält allgemeine Informationen, Programmieranleitungen und Beispiele für LINQ to XML. |
Anleitungen und Themen mit exemplarischen Vorgehensweisen
Gewusst wie: Abfragen einer Datenbank
Vorgehensweise: Aufrufen einer gespeicherten Prozedur
Vorgehensweise: Ändern von Daten in einer Datenbank
Vorgehensweise: Kombinieren von Daten mit Joins
Vorgehensweise: Sortieren von Abfrageergebnissen
Vorgehensweise: Filtern von Abfrageergebnissen
Gewusst wie: Zählen, Summen oder Durchschnittliche Daten
Vorgehensweise: Suchen des Minimal- oder Maximalwerts in einem Abfrageergebnis
Empfohlene Buchkapitel
Kapitel 17: LINQ in Programming Visual Basic 2008