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