Select (Cláusula, Visual Basic)

Define el resultado de una consulta.

Sintaxis

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

Partes

var1
Opcional. Alias que se puede usar para hacer referencia a los resultados de la expresión de columna.

fieldName1
Necesario. Nombre del campo que se va a devolver en el resultado de la consulta.

Comentarios

Puede usar la cláusula Select para definir los resultados que se van a devolver desde una consulta. Esto le permite definir los miembros de un nuevo tipo anónimo creado por una consulta o dirigirse a los miembros de un tipo con nombre devuelto por una consulta. La cláusula Select no es necesaria para una consulta. Si no se especifica ninguna cláusula Select, la consulta devolverá un tipo basado en todos los miembros de las variables de intervalo identificadas para el ámbito actual. Para obtener más información, consulte Tipos anónimos (Guía de programación de C#). Cuando una consulta crea un tipo con nombre, devolverá un resultado de tipo IEnumerable<T> donde T es el tipo creado.

La cláusula Select puede hacer referencia a cualquier variable del ámbito actual. Esto incluye variables de intervalo identificadas en la cláusula From (o las cláusulas From). También incluye las nuevas variables creadas con un alias por las cláusulas Aggregate, Let, Group By o Group Join, o de una cláusula Select anterior en la expresión de consulta. La cláusula Select también puede incluir valores estáticos. Por ejemplo, en el ejemplo de código siguiente se muestra una expresión de consulta en la que la cláusula Select define el resultado de la consulta como un nuevo tipo anónimo con cuatro miembros: ProductName, Price, Discount y DiscountedPrice. Los valores de miembro ProductName y Price se toman de la variable de intervalo de productos que se define en la cláusula From. El valor de miembro DiscountedPrice se calcula en la cláusula Let. El miembro Discount es un valor estático.

' 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 cláusula Select introduce un nuevo conjunto de variables de rango para las cláusulas de consulta posteriores y las variables de intervalo anteriores ya no quedan dentro del ámbito. La última cláusula Select de una expresión de consulta determina el valor devuelto de la consulta. Por ejemplo, la consulta siguiente devuelve el nombre de la empresa y el identificador de pedido de cada pedido de cliente para el que el total supera los 500. La primera cláusula Select identifica las variables de intervalo de la cláusula Where y la segunda cláusula Select. La segunda cláusula Select identifica los valores devueltos por la consulta como un nuevo tipo anónimo.

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

Si la cláusula Select identifica un solo elemento que se va a devolver, la expresión de consulta devuelve una colección del tipo de ese único elemento. Si la cláusula Select identifica varios elementos que se van a devolver, la expresión de consulta devuelve una colección de un nuevo tipo anónimo, en función de los elementos seleccionados. Por ejemplo, las dos consultas siguientes devuelven colecciones de dos tipos diferentes en función de la cláusula Select. La primera consulta devuelve una colección de nombres de empresa como cadenas. La segunda consulta devuelve una colección de objetos Customer rellenados con los nombres de empresa y la información de dirección.

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}

Ejemplo

La siguiente expresión de consulta usa una cláusula From para declarar una variable de rango cust para la colección customers. La cláusula Select selecciona el nombre del cliente y el valor de id. y rellena las columnas CompanyName y CustomerID de la nueva variable de rango. La instrucción For Each recorre en bucle cada objeto devuelto y muestra las columnas CompanyName y CustomerID para cada registro.

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

Consulte también