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 Aggregateklauzul , Let, Group ByGroup 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, Discounti 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

Zobacz też