Select-Klausel (Visual Basic)
Definiert das Ergebnis einer Abfrage
Syntax
Select [ var1 = ] fieldName1 [, [ var2 = ] fieldName2 [...] ]
Bestandteile
var1
Optional. Ein Alias, der verwendet werden kann, um auf die Ergebnisse des Spaltenausdrucks zu verweisen
fieldName1
Erforderlich. Der Name des Felds, das im Abfrageergebnis zurückgegeben werden soll
Bemerkungen
Sie können die Select
-Klausel verwenden, um die Ergebnisse zu definieren, die von einer Abfrage zurückgegeben werden sollen. Auf diese Weise können Sie entweder die Member eines neuen anonymen Typs definieren, der von einer Abfrage erstellt wird, oder die Member eines benannten Typs, der von einer Abfrage zurückgegeben wird. Die Select
-Klausel ist für eine Abfrage nicht erforderlich. Wenn keine Select
-Klausel angegeben ist, gibt die Abfrage einen Typ basierend auf allen Membern der Bereichsvariablen zurück, die für den aktuellen Bereich identifiziert wurden. Weitere Informationen finden Sie unter Anonyme Typen. Wenn eine Abfrage einen benannten Typ erstellt, gibt sie ein Ergebnis des Typs IEnumerable<T> zurück, wobei T
der erstellte Typ ist.
Die Select
-Klausel kann auf alle Variablen im aktuellen Bereich verweisen. Dazu gehören Bereichsvariablen, die in der From
-Klausel (oder der From
-Klauseln) identifiziert werden. Sie enthält auch alle neuen Variablen, die mit einem Alias durch die Klauseln Aggregate
, Let
, Group By
oder Group Join
oder Variablen aus einer vorherigen Select
-Klausel im Abfrageausdruck erstellt wurden. Die Select
-Klausel kann auch statische Werte enthalten. Das folgende Codebeispiel zeigt z. B. einen Abfrageausdruck, in dem die Select
-Klausel das Abfrageergebnis als neuen anonymen Typ mit vier Membern definiert: ProductName
, Price
, Discount
und DiscountedPrice
. Die Memberwerte ProductName
und Price
stammen aus der Produktbereichsvariable, die in der From
-Klausel definiert ist. Der DiscountedPrice
-Memberwert wird in der Let
-Klausel berechnet. Der Discount
-Member ist ein statischer Wert.
' 10% discount
Dim discount_10 = 0.1
Dim priceList =
From product In products
Let DiscountedPrice = product.UnitPrice * (1 - discount_10)
Select product.ProductName, Price = product.UnitPrice,
Discount = discount_10, DiscountedPrice
Die Select
-Klausel führt neue Bereichsvariablen für nachfolgende Abfrageklauseln ein, und frühere Bereichsvariablen befinden werden nicht mehr berücksichtigt. Die letzte Select
-Klausel in einem Abfrageausdruck bestimmt den Rückgabewert der Abfrage. Die folgende Abfrage gibt beispielsweise den Firmennamen und die Auftrags-ID für jeden Kundenauftrag zurück, für den die Summe 500 überschreitet. Die erste Select
-Klausel identifiziert die Bereichsvariablen für die Where
-Klausel und die zweite Select
-Klausel. Die zweite Select
-Klausel identifiziert die von der Abfrage zurückgegebenen Werte als neuen anonymen Typ.
Dim customerList = From cust In customers, ord In cust.Orders
Select Name = cust.CompanyName,
Total = ord.Total, ord.OrderID
Where Total > 500
Select Name, OrderID
Wenn die Select
-Klausel ein einzelnes Element identifiziert, das zurückgegeben werden soll, gibt der Abfrageausdruck eine Sammlung des Typs dieses einzelnen Elements zurück. Wenn die Select
-Klausel mehrere zurückzugebende Elemente identifiziert, gibt der Abfrageausdruck eine Sammlung eines neuen anonymen Typs basierend auf den ausgewählten Elementen zurück. Die folgenden beiden Abfragen geben beispielsweise Sammlungen von zwei verschiedenen Typen basierend auf der Select
-Klausel zurück. Die erste Abfrage gibt eine Sammlung von Firmennamen als Zeichenfolgen zurück. Die zweite Abfrage gibt eine Sammlung von Customer
-Objekten zurück, die mit den Firmennamen und Adressinformationen aufgefüllt werden.
Dim customerNames = From cust In customers
Select cust.CompanyName
Dim customerInfo As IEnumerable(Of Customer) =
From cust In customers
Select New Customer With {.CompanyName = cust.CompanyName,
.Address = cust.Address,
.City = cust.City,
.Region = cust.Region,
.Country = cust.Country}
Beispiel
Der folgende Abfrageausdruck verwendet eine From
-Klausel, um eine Bereichsvariable cust
für die customers
-Sammlung zu deklarieren. Die Select
-Klausel wählt den Kundennamen und den ID-Wert aus und füllt die Spalten CompanyName
und CustomerID
der neuen Bereichsvariable auf. Die For Each
-Anweisung durchläuft jedes zurückgegebene Objekt und zeigt die Spalten CompanyName
und CustomerID
für jeden Datensatz an.
Sub SelectCustomerNameAndId(ByVal customers() As Customer)
Dim nameIds = From cust In customers
Select cust.CompanyName, cust.CustomerID
For Each nameId In nameIds
Console.WriteLine(nameId.CompanyName & ": " & nameId.CustomerID)
Next
End Sub