Condividi tramite


Clausola Select (Visual Basic)

Definisce il risultato di una query.

Sintassi

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

Parti

var1
Facoltativo. Alias che può essere utilizzato per fare riferimento ai risultati dell'espressione di colonna.

fieldName1
Obbligatorio. Nome del campo da restituire nel risultato della query.

Osservazioni:

È possibile usare la clausola Select per definire i risultati da restituire da una query. In questo modo è possibile definire i membri di un nuovo tipo anonimo creato da una query o definire come destinazione i membri di un tipo denominato restituito da una query. La clausola Select non è necessaria per una query. Se non viene specificata alcuna clausola Select, la query restituirà un tipo basato su tutti i membri delle variabili di intervallo identificate per l'ambito corrente. Per altre informazioni, vedere Tipi anonimi. Quando una query crea un tipo denominato, restituisce un risultato di tipo IEnumerable<T> in cui T è il tipo creato.

La clausola Select può fare riferimento a qualsiasi variabile nell'ambito corrente. Sono incluse le variabili di intervallo identificate nella clausola From (o nelle clausole From). Include anche eventuali nuove variabili create con un alias dalle clausole Aggregate, Let, Group By o Group Join o dalle variabili di una clausola Select precedente nell'espressione di query. La clausola Select può includere anche valori statici. Nell'esempio di codice seguente, ad esempio, viene illustrata un'espressione di query in cui la clausola Select definisce il risultato della query come nuovo tipo anonimo con quattro membri: ProductName, Price, Discount e DiscountedPrice. I valori dei membri ProductName e Price vengono ricavati dalla variabile dell'intervallo di prodotti definita nella clausola From. Il valore DiscountedPrice del membro viene calcolato nella clausola Let. Il membro Discount è un valore statico.

' 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

La clausola Select introduce un nuovo set di variabili di intervallo per le clausole di query successive e le variabili di intervallo precedenti non sono più nell'ambito. L'ultima clausola Select in un'espressione di query determina il valore restituito della query. Ad esempio, la query seguente restituisce il nome della società e l'ID ordine per ogni ordine cliente per il quale il totale supera 500. La prima clausola Select identifica le variabili di intervallo per la clausola Where e la seconda clausola Select. La seconda clausola Select identifica i valori restituiti dalla query come nuovo tipo anonimo.

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

Se la clausola Select identifica un singolo elemento da restituire, l'espressione di query restituisce una raccolta del tipo di tale singolo elemento. Se la clausola Select identifica più elementi da restituire, l'espressione di query restituisce una raccolta di un nuovo tipo anonimo, in base agli elementi selezionati. Ad esempio, le due query seguenti restituiscono raccolte di due tipi diversi in base alla clausola Select. La prima query restituisce una raccolta di nomi di società come stringhe. La seconda query restituisce una raccolta di oggetti Customer popolati con i nomi e le informazioni sull'indirizzo della società.

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}

Esempio

Nell'espressione di query seguente viene utilizzata una clausola From per dichiarare una variabile di intervallo cust per la raccolta customers. La clausola Select seleziona il nome del cliente e il valore ID e popola le colonne CompanyName e CustomerID della nuova variabile di intervallo. L'istruzione For Each esegue un ciclo su ogni oggetto restituito e visualizza le colonne CompanyName e CustomerID per ogni record.

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

Vedi anche