Select – klauzule (Visual Basic)

Definuje výsledek dotazu.

Syntaxe

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

Součástky

var1
Nepovinné. Alias, který lze použít k odkazování na výsledky výrazu sloupce.

fieldName1
Povinný: Název pole, které se má vrátit ve výsledku dotazu.

Poznámky

Klauzuli Select můžete použít k definování výsledků, které se mají vrátit z dotazu. To umožňuje definovat členy nového anonymního typu, který je vytvořen dotazem, nebo cílit na členy pojmenovaného typu vráceného dotazem. Klauzule Select není vyžadována pro dotaz. Pokud není zadaná žádná Select klauzule, dotaz vrátí typ na základě všech členů proměnných rozsahu identifikovaných pro aktuální obor. Další informace naleznete v tématu Anonymní typy. Když dotaz vytvoří pojmenovaný typ, vrátí výsledek typu IEnumerable<T> , kde T je vytvořený typ.

Klauzule Select může odkazovat na libovolné proměnné v aktuálním oboru. To zahrnuje proměnné rozsahu From identifikované v klauzuli (nebo From klauzulích). Zahrnuje také všechny nové proměnné vytvořené pomocí aliasu pomocí Aggregateklauzulí , Let, Group By, nebo Group Join klauzulí nebo proměnných z předchozí Select klauzule ve výrazu dotazu. Klauzule Select může také obsahovat statické hodnoty. Například následující příklad kódu ukazuje výraz dotazu, ve kterém Select klauzule definuje výsledek dotazu jako nový anonymní typ se čtyřmi členy: ProductName, Price, Discounta DiscountedPrice. Price Hodnoty ProductName členů jsou převzaty z proměnné rozsahu produktů, která je definována From v klauzuli. Hodnota DiscountedPrice člena se vypočítá v klauzuli Let . Člen Discount je statická hodnota.

' 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

Klauzule Select zavádí novou sadu proměnných rozsahu pro následné klauzule dotazu a předchozí proměnné rozsahu již nejsou v oboru. Poslední Select klauzule ve výrazu dotazu určuje návratovou hodnotu dotazu. Následující dotaz například vrátí název společnosti a ID objednávky pro každou objednávku zákazníka, pro kterou celkový součet překročí 500. První Select klauzule identifikuje proměnné rozsahu pro Where klauzuli a druhou Select klauzuli. Druhá Select klauzule identifikuje hodnoty vrácené dotazem jako nový anonymní 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 Pokud klauzule identifikuje jednu položku, která se má vrátit, výraz dotazu vrátí kolekci typu dané položky. Select Pokud klauzule identifikuje více položek, které se mají vrátit, vrátí výraz dotazu kolekci nového anonymního typu na základě vybraných položek. Například následující dva dotazy vrací kolekce dvou různých typů na Select základě klauzule. První dotaz vrátí kolekci názvů společností jako řetězce. Druhý dotaz vrátí kolekci Customer objektů naplněných názvy a informacemi o adrese společnosti.

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}

Příklad

Následující výraz dotazu používá From klauzuli k deklaraci proměnné cust rozsahu pro kolekci customers . Klauzule Select vybere název zákazníka a hodnotu ID a naplní CompanyNameCustomerID sloupce nové proměnné rozsahu. Příkaz For Each smyčky přes každý vrácený objekt a zobrazí CompanyName sloupce CustomerID pro každý záznam.

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

Viz také