Cláusula Select (Visual Basic)

Define o resultado de uma consulta.

Sintaxe

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

Partes

var1
Opcional. Um alias que pode ser usado para fazer referência aos resultados da expressão da coluna.

fieldName1
Obrigatórios. O nome do campo a ser retornado no resultado da consulta.

Comentários

Você pode usar a cláusula Select para definir os resultados a serem retornados de uma consulta. Isso permite definir os membros de um novo tipo anônimo criado por uma consulta ou direcionar os membros de um tipo nomeado que é retornado por uma consulta. A cláusula Select não é necessária para uma consulta. Se nenhuma cláusula Select for especificada, a consulta retornará um tipo com base em todos os membros das variáveis de intervalo identificadas para o escopo atual. Para obter mais informações, consulte Tipos Anônimos. Quando uma consulta cria um tipo nomeado, ela retorna um resultado do tipo IEnumerable<T> em que T é o tipo criado.

A cláusula Select pode fazer referência a qualquer variável no escopo atual. Isso inclui variáveis de intervalo identificadas na cláusula From (ou cláusulas From). Ele também inclui novas variáveis criadas com um alias pelas cláusulas Aggregate, Let, Group By ou Group Join, ou variáveis de uma cláusula Select anterior na expressão de consulta. A cláusula Select também pode incluir valores estáticos. Por exemplo, o exemplo de código a seguir mostra uma expressão de consulta na qual a cláusula Select define o resultado da consulta como um novo tipo anônimo com quatro membros: ProductName, Price, Discount e DiscountedPrice. Os valores de membro ProductName e Price são obtidos da variável de intervalo de produtos definida na cláusula From. O valor do membro DiscountedPrice é calculado na cláusula Let. O membro Discount é um 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

A cláusula Select introduz um novo conjunto de variáveis de intervalo para cláusulas de consulta seguintes, e as variáveis de intervalo anteriores não estão mais no escopo. A última cláusula Select em uma expressão de consulta determina o valor retornado da consulta. Por exemplo, a consulta a seguir retorna o nome da empresa e a ID do pedido para cada pedido do cliente para o qual o total excede 500. A primeira cláusula Select identifica as variáveis de intervalo para a cláusula Where e a segunda cláusula Select. A segunda cláusula Select identifica os valores retornados pela consulta como um novo 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

Se a cláusula Select identificar um único item a ser retornado, a expressão de consulta retornará uma coleção do tipo desse único item. Se a cláusula Select identificar vários itens a serem retornados, a expressão de consulta retornará uma coleção de um novo tipo anônimo, com base nos itens selecionados. Por exemplo, as duas consultas a seguir retornam coleções de dois tipos diferentes com base na cláusula Select. A primeira consulta retorna uma coleção de nomes de empresa como cadeias de caracteres. A segunda consulta retorna uma coleção de objetos Customer preenchidos com os nomes da empresa e informações de endereço.

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}

Exemplo

A expressão de consulta a seguir usa uma cláusula From para declarar uma variável de intervalo cust para a coleção customers. A cláusula Select seleciona o nome do cliente e o valor da ID e preenche as colunas CompanyName e CustomerID da nova variável de intervalo. A instrução For Each faz loop sobre cada objeto retornado e exibe as colunas CompanyName e CustomerID de 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

Confira também