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 By
eller 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
, Discount
och 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