Dela via


Select-sats (Visual Basic)

Definierar resultatet av en fråga.

Syntax

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

Delar

var1
Valfritt. Ett alias som kan användas för att referera till resultatet av kolumnuttrycket.

fieldName1
Obligatoriska. Namnet på det fält som ska returneras i frågeresultatet.

Kommentarer

Du kan använda Select -satsen för att definiera resultatet som ska returneras från en fråga. På så sätt kan du antingen definiera medlemmar av en ny anonym typ som skapas av en fråga eller rikta in dig på medlemmar av en namngiven typ som returneras av en fråga. Satsen Select krävs inte för en fråga. Om ingen Select sats anges returnerar frågan en typ som baseras på alla medlemmar i de intervallvariabler som identifierats för det aktuella omfånget. Mer information finns i Anonyma typer. När en fråga skapar en namngiven typ returneras ett resultat av typen IEnumerable<T> där T är den skapade typen.

Select Satsen kan referera till alla variabler i det aktuella omfånget. Detta inkluderar intervallvariabler som identifieras i From -satsen (eller From -satserna). Den innehåller även alla nya variabler som skapats med ett alias av satserna Aggregate, Let, Group Byeller eller Group Join variablerna från en tidigare Select sats i frågeuttrycket. Satsen Select kan också innehålla statiska värden. I följande kodexempel visas till exempel ett frågeuttryck där Select satsen definierar frågeresultatet som en ny anonym typ med fyra medlemmar: ProductName, Price, Discountoch DiscountedPrice. Värdena ProductName och Price medlemsvärdena hämtas från den produktintervallvariabel som definieras i From -satsen. Medlemsvärdet DiscountedPrice beräknas i Let -satsen. Medlemmen Discount är ett statiskt värde.

' 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

Satsen Select introducerar en ny uppsättning intervallvariabler för efterföljande frågesatser och tidigare intervallvariabler finns inte längre i omfånget. Den sista Select satsen i ett frågeuttryck avgör returvärdet för frågan. Följande fråga returnerar till exempel företagets namn och order-ID för varje kundorder för vilken summan överstiger 500. Den första Select satsen identifierar intervallvariablerna för Where -satsen och den andra Select satsen. Den andra Select satsen identifierar de värden som returneras av frågan som en ny anonym typ.

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 Om satsen identifierar ett enskilt objekt som ska returneras returnerar frågeuttrycket en samling av typen för det enskilda objektet. Select Om satsen identifierar flera objekt som ska returneras returnerar frågeuttrycket en samling av en ny anonym typ baserat på de markerade objekten. Följande två frågor returnerar till exempel samlingar av två olika typer baserat på Select -satsen. Den första frågan returnerar en samling företagsnamn som strängar. Den andra frågan returnerar en samling Customer objekt som fyllts med företagsnamn och adressinformation.

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}

Exempel

Följande frågeuttryck använder en From sats för att deklarera en intervallvariabel cust för customers samlingen. Satsen Select väljer kundens namn och ID-värde och fyller i kolumnerna CompanyName och CustomerID i den nya intervallvariabeln. Instruktionen For Each loopar över varje returnerat objekt och visar kolumnerna CompanyName och CustomerID för varje post.

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

Se även