Select — Klauzula (Visual Basic)
Definiuje wynik zapytania.
Składnia
Select [ var1 = ] fieldName1 [, [ var2 = ] fieldName2 [...] ]
generatora
var1
Opcjonalny. Alias, który może służyć do odwołowania się do wyników wyrażenia kolumny.
fieldName1
Wymagany. Nazwa pola, które ma być zwracane w wyniku zapytania.
Uwagi
Możesz użyć klauzuli Select
, aby zdefiniować wyniki, które mają być zwracane z zapytania. Dzięki temu można zdefiniować elementy członkowskie nowego typu anonimowego utworzonego przez zapytanie lub kierować do elementów członkowskich nazwanego typu zwracanego przez zapytanie. Klauzula nie jest wymagana Select
dla zapytania. Jeśli nie Select
określono klauzuli, zapytanie zwróci typ na podstawie wszystkich elementów członkowskich zmiennych zakresu zidentyfikowanych dla bieżącego zakresu. Aby uzyskać więcej informacji, zobacz Typy anonimowe. Gdy zapytanie tworzy nazwany typ, zwróci wynik typu IEnumerable<T> , w którym T
jest tworzony typ.
Klauzula Select
może odwoływać się do dowolnych zmiennych w bieżącym zakresie. Obejmuje to zmienne zakresu zidentyfikowane w klauzuli From
(lub From
klauzulach). Zawiera również wszelkie nowe zmienne utworzone z aliasem według Aggregate
klauzul , Let
, Group By
Group Join
lub ze zmiennych z poprzedniej Select
klauzuli w wyrażeniu zapytania. Klauzula Select
może również zawierać wartości statyczne. Na przykład poniższy przykład kodu przedstawia wyrażenie zapytania, w którym Select
klauzula definiuje wynik zapytania jako nowy typ anonimowy z czterema elementami członkowskimi: ProductName
, Price
, Discount
i DiscountedPrice
. Wartości ProductName
składowe i Price
są pobierane ze zmiennej zakresu produktów zdefiniowanej w klauzuli From
. Wartość DiscountedPrice
elementu członkowskiego jest obliczana w klauzuli Let
. Element Discount
członkowski jest wartością statyczną.
' 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
Klauzula Select
wprowadza nowy zestaw zmiennych zakresu dla kolejnych klauzul zapytania, a poprzednie zmienne zakresu nie są już w zakresie. Select
Ostatnia klauzula w wyrażeniu zapytania określa wartość zwracaną zapytania. Na przykład następujące zapytanie zwraca nazwę firmy i identyfikator zamówienia dla każdego zamówienia klienta, dla którego suma przekracza 500. Select
Pierwsza klauzula identyfikuje zmienne zakresu klauzuli Where
i drugą Select
klauzulę. Druga Select
klauzula identyfikuje wartości zwracane przez zapytanie jako nowy typ anonimowy.
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
Jeśli klauzula Select
identyfikuje pojedynczy element do zwrócenia, wyrażenie zapytania zwraca kolekcję typu tego pojedynczego elementu. Jeśli klauzula Select
identyfikuje wiele elementów do zwrócenia, wyrażenie zapytania zwraca kolekcję nowego typu anonimowego na podstawie wybranych elementów. Na przykład następujące dwa zapytania zwracają kolekcje dwóch różnych typów na podstawie klauzuli Select
. Pierwsze zapytanie zwraca kolekcję nazw firm jako ciągów. Drugie zapytanie zwraca kolekcję Customer
obiektów wypełnionych nazwami firmy i informacjami o adresach.
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}
Przykład
Następujące wyrażenie zapytania używa klauzuli w From
celu zadeklarowania zmiennej cust
zakresu dla kolekcji customers
. Klauzula Select
wybiera nazwę klienta i wartość identyfikatora oraz wypełnia CompanyName
kolumny i CustomerID
nowej zmiennej zakresu. Instrukcja For Each
wykonuje pętle dla każdego zwróconego obiektu i wyświetla CompanyName
kolumny i CustomerID
dla każdego rekordu.
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