Предложение Select (Visual Basic)
Определяет результат запроса.
Синтаксис
Select [ var1 = ] fieldName1 [, [ var2 = ] fieldName2 [...] ]
Детали
var1
Необязательно. Псевдоним, который можно использовать для ссылки на результаты выражения столбца.
fieldName1
Обязательный. Имя поля, возвращаемого в результате запроса.
Замечания
Предложение можно использовать Select
для определения результатов, возвращаемых из запроса. Это позволяет определить элементы нового анонимного типа, созданного запросом, или нацелиться на члены именованного типа, возвращаемого запросом. Предложение Select
не требуется для запроса. Если предложение не Select
указано, запрос вернет тип на основе всех элементов переменных диапазона, определенных для текущей область. Дополнительные сведения см. в статье Анонимные типы. При создании именованного типа запрос возвращает результат типа IEnumerable<T> , в котором T
создается тип.
Предложение Select
может ссылаться на любые переменные в текущем область. Это включает переменные диапазона, определенные в From
предложении (или From
предложениях). Он также включает в себя все новые переменные, созданные с псевдонимом Aggregate
, Group By
Let
или предложениями, или Group Join
переменными из предыдущего Select
предложения в выражении запроса. Предложение также может включать статические Select
значения. Например, в следующем примере кода показано выражение запроса, в котором Select
предложение определяет результат запроса как новый анонимный тип с четырьмя элементами: ProductName
, Price
и Discount
DiscountedPrice
. Значения ProductName
элементов Price
и берутся из переменной диапазона продуктов, определенной в предложении From
. Значение DiscountedPrice
члена вычисляется в предложении Let
. Элемент Discount
является статическим значением.
' 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
Предложение Select
вводит новый набор переменных диапазона для последующих предложений запросов, а предыдущие переменные диапазона больше не находятся в область. Select
Последнее предложение в выражении запроса определяет возвращаемое значение запроса. Например, следующий запрос возвращает имя компании и идентификатор заказа для каждого заказа клиента, для которого общая сумма превышает 500. Первое Select
предложение определяет переменные диапазона для Where
предложения и второго Select
предложения. Второе Select
предложение определяет значения, возвращаемые запросом, как новый анонимный тип.
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
Select
Если предложение определяет один элемент для возврата, выражение запроса возвращает коллекцию типа этого отдельного элемента. Select
Если предложение определяет несколько возвращаемых элементов, выражение запроса возвращает коллекцию нового анонимного типа на основе выбранных элементов. Например, следующие два запроса возвращают коллекции двух разных типов на Select
основе предложения. Первый запрос возвращает коллекцию имен компаний в виде строк. Второй запрос возвращает коллекцию Customer
объектов, заполненных именами компании и сведениями об адресе.
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}
Пример
Следующее выражение запроса использует From
предложение для объявления переменной cust
диапазона для customers
коллекции. Предложение Select
выбирает значение имени клиента и идентификатора и заполняет CompanyName
CustomerID
столбцы новой переменной диапазона. Оператор For Each
цикличен по каждому возвращаемого объекта и CustomerID
отображает CompanyName
столбцы для каждой записи.
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