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

Weitere Informationen