Предложение Select (Visual Basic)Select Clause (Visual Basic)

Определяет результат запроса.Defines the result of a query.

СинтаксисSyntax

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

ЧастиParts

var1
Необязательный параметр.Optional. Псевдоним, который может использоваться для ссылки на результаты выражения столбца.An alias that can be used to reference the results of the column expression.

fieldName1
Обязательный.Required. Имя поля, возвращаемого в результате запроса.The name of the field to return in the query result.

ПримечанияRemarks

Для определения результатов, возвращаемых из запроса, можно использовать предложение Select.You can use the Select clause to define the results to return from a query. Это позволяет либо определить члены нового анонимного типа, созданного запросом, либо целевые элементы именованного типа, возвращаемые запросом.This enables you to either define the members of a new anonymous type that is created by a query, or to target the members of a named type that is returned by a query. Предложение Select не требуется для запроса.The Select clause is not required for a query. Если предложение Select не указано, запрос возвратит тип, основанный на всех членах переменных диапазона, определенных для текущей области.If no Select clause is specified, the query will return a type based on all members of the range variables identified for the current scope. Дополнительные сведения см. в статье Анонимные типы.For more information, see Anonymous Types. Когда запрос создает именованный тип, он вернет результат типа IEnumerable<T>, где T — это созданный тип.When a query creates a named type, it will return a result of type IEnumerable<T> where T is the created type.

Предложение Select может ссылаться на любые переменные в текущей области.The Select clause can reference any variables in the current scope. Сюда входят переменные диапазона, определенные в предложении From (или предложения From).This includes range variables identified in the From clause (or From clauses). Он также включает все новые переменные, созданные с помощью псевдонима, с помощью предложений Aggregate, Let, Group By или Group Join или переменных из предыдущего предложения Select в выражении запроса.It also includes any new variables created with an alias by the Aggregate, Let, Group By, or Group Join clauses, or variables from a previous Select clause in the query expression. Предложение Select также может включать статические значения.The Select clause can also include static values. Например, в следующем примере кода показано выражение запроса, в котором предложение Select определяет результат запроса как новый анонимный тип с четырьмя элементами: ProductName, Price, Discount и DiscountedPrice.For example, the following code example shows a query expression in which the Select clause defines the query result as a new anonymous type with four members: ProductName, Price, Discount, and DiscountedPrice. Значения элементов ProductName и Price берутся из переменной диапазона продуктов, которая определена в предложении From.The ProductName and Price member values are taken from the product range variable that is defined in the From clause. Значение элемента DiscountedPrice вычисляется в предложении Let.The DiscountedPrice member value is calculated in the Let clause. Элемент Discount является статическим значением.The Discount member is a static value.

' 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 вводит новый набор переменных диапазона для последующих предложений запроса, а предыдущие переменные диапазона больше не находятся в области.The Select clause introduces a new set of range variables for subsequent query clauses, and previous range variables are no longer in scope. Последнее предложение Select в выражении запроса определяет возвращаемое значение запроса.The last Select clause in a query expression determines the return value of the query. Например, следующий запрос возвращает название компании и идентификатор заказа для каждого заказа клиента, для которого сумма превышает 500.For example, the following query returns the company name and order ID for every customer order for which the total exceeds 500. Первое предложение Select определяет переменные диапазона для предложения Where и второе предложение Select.The first Select clause identifies the range variables for the Where clause and the second Select clause. Второе предложение Select определяет значения, возвращаемые запросом в виде нового анонимного типа.The second Select clause identifies the values returned by the query as a new anonymous type.

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 определяет один возвращаемый элемент, выражение запроса возвращает коллекцию типа этого отдельного элемента.If the Select clause identifies a single item to return, the query expression returns a collection of the type of that single item. Если предложение Select определяет несколько возвращаемых элементов, выражение запроса возвращает коллекцию нового анонимного типа на основе выбранных элементов.If the Select clause identifies multiple items to return, the query expression returns a collection of a new anonymous type, based on the selected items. Например, следующие два запроса возвращают коллекции двух разных типов на основе предложения Select.For example, the following two queries return collections of two different types based on the Select clause. Первый запрос возвращает коллекцию названий компаний в виде строк.The first query returns a collection of company names as strings. Второй запрос возвращает коллекцию объектов Customer, заполненных названиями и адресами компании.The second query returns a collection of Customer objects populated with the company names and address information.

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}

ПримерExample

Следующее выражение запроса использует предложение From для объявления переменной диапазона cust для коллекции customers.The following query expression uses a From clause to declare a range variable cust for the customers collection. Предложение Select выбирает имя клиента и значение идентификатора и заполняет столбцы CompanyName и CustomerID для новой переменной диапазона.The Select clause selects the customer name and ID value and populates the CompanyName and CustomerID columns of the new range variable. Инструкция For Each циклически перебирает каждый возвращенный объект и отображает столбцы CompanyName и CustomerID для каждой записи.The For Each statement loops over each returned object and displays the CompanyName and CustomerID columns for each 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

См. такжеSee also