Diese Dokumentation wurde archiviert und wird nicht länger gepflegt.

Select-Klausel (Visual Basic)

Aktualisiert: November 2007

Definiert das Ergebnis einer Abfrage.


Select [ var1 = ] fieldName1 [, [ var2 = ] fieldName2 [...] ]

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.

Mit der Select-Klausel können Sie die Ergebnisse definieren, die in einer Abfrage zurückgegeben werden sollen. Dadurch können Sie die Member eines neuen anonymen Typs definieren, der von einer Abfrage erstellt wird, oder auf die Member eines benannten Typs zugreifen, der von einer Abfrage zurückgegeben wird. Eine Abfrage muss keine Select-Klausel enthalten. Wenn Sie keine Select-Klausel angeben, wird von der Abfrage ein Typ auf Grundlage aller Member der Bereichsvariablen zurückgegeben, die für den aktuellen Bereich angegeben wurden. Weitere Informationen finden Sie unter Anonyme Typen. Wenn eine Abfrage einen benannten Typ erstellt, wird ein Ergebnis des Typs IEnumerable<T> zurückgegeben. Dabei ist T der erstellte Typ.

Die Select-Klausel kann auf alle Variablen des aktuellen Bereichs verweisen. Hierzu gehören die in der From-Klausel (oder den From-Klauseln) angegebenen Bereichsvariablen. Weiterhin gehören hierzu alle neuen, in der Aggregate-Klausel, der Let-Klausel, der Group By-Klausel oder der Group Join-Klausel mit einem Alias erstellten Variablen, sowie die Variablen einer im Abfrageausdruck vorangestellten Select-Klausel. Die Select-Klausel kann auch statische Werte enthalten. Beispielsweise enthält das folgende Codebeispiel einen Abfrageausdruck, in dem die Select-Klausel das Abfrageergebnis als einen neuen anonymen Typ mit den vier Membern ProductName, Price, Discount und DiscountedPrice definiert. Die Werte für den ProductName-Member und den Price-Member werden aus der Bereichsvariablen product übernommen, die in der From-Klausel definiert wird. Der Wert für den DiscountedPrice-Member 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 einen neuen Satz von Bereichsvariablen für nachfolgende Abfrageklauseln ein. Die vorherigen Bereichsvariablen befinden sich nicht mehr im Gültigkeitsbereich. Die letzte Select-Klausel in einem Abfrageausdruck legt den Rückgabewert der Abfrage fest. Beispielsweise werden in der folgenden Abfrage für jede Kundenbestellung, deren Gesamtsumme größer als 500 ist, der Firmenname und die Auftrags-ID zurückgegeben. Die erste Select-Klausel gibt die Bereichsvariablen für die Where-Klausel und die zweite Select-Klausel an. Die zweite Select-Klausel gibt die von der Abfrage zurückgegebenen Werte als neuen anonymen Typ an.

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 zurückzugebendes Element angibt, wird vom Abfrageausdruck eine Auflistung des Typs dieses einzelnen Elements zurückgegeben. Wenn die Select-Klausel mehrere zurückzugebende Elemente angibt, wird vom Abfrageausdruck eine Auflistung eines neuen anonymen Typs zurückgegeben, der auf den ausgewählten Elementen basiert. Beispielsweise geben die beiden folgenden Abfragen auf Grundlage der Select-Klausel Auflistungen von zwei verschiedenen Typen zurück. Die erste Abfrage gibt eine Auflistung von Firmennamen als Zeichenfolgen zurück. Die zweite Abfrage gibt eine Auflistung von Customer-Objekten mit den entsprechenden Firmennamen und Adressinformationen zurück.

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}


Der folgende Abfrageausdruck verwendet eine From-Klausel zum Deklarieren einer Bereichsvariablen cust für die customers-Auflistung. Mit der Select-Klausel werden der Kundenname und die ID ausgewählt und die Name-Spalte sowie die ID-Spalte der neuen Bereichsvariablen gefüllt. Die For Each-Anweisung durchläuft alle zurückgegebenen Objekte und zeigt für jeden Datensatz die Name-Spalte und die ID-Spalte 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


Anzeigen: