Sdílet prostřednictvím


Funkce Visual Basic podporující LINQ

Název LINQ (Language-Integrated Query) odkazuje na technologii v jazyce Visual Basic, že podporuje syntaxe dotazu a ostatní jazykové konstrukty přímo v jazyce.S LINQ, není nutné učit nový jazyk na dotaz na externí zdroj dat.Dotaz lze data v relačních databázích, úložiště XML nebo objektů jazyka Visual Basic.Tato integrace dotazů do jazyka umožňuje kompilace kontrolu syntaktické chyby a bezpečnost typů.Tato integrace zajišťuje také již znáte většinu mají vědět, že zápis ve formátu RTF, různé dotazy v jazyce Visual Basic.

Následující oddíly popisují konstrukce jazyka, které podporují LINQ dost podrobně můžete začít v úvodní dokumentaci, příklady kódu a ukázkové aplikace pro čtení.Můžete také klepnout na odkazy nalézt podrobnější vysvětlení jak přijít jazykové funkce společně povolit integrované jazyka dotazu.Je vhodné místo pro start Návod: Zápis dotazů ve Visual Basic.

Výrazy dotazu

Výrazy dotazu v jazyce Visual Basic lze vyjádřit v deklarativní syntaxi, která je podobná SQL nebo XQuery.V době kompilace syntaxe dotazu převede na volání metody provádění metod rozšíření standardního dotazu operátor LINQ zprostředkovatele.Určení aplikací, které standardní dotaz operátory jsou v oboru zadáním příslušný obor názvů s Imports prohlášení.Syntaxe jazyka Visual Basic výrazu dotazu vypadá takto:

Dim londonCusts = From cust In customers
                  Where cust.City = "London"
                  Order By cust.Name Ascending
                  Select cust.Name, cust.Phone

Další informace naleznete v tématu Představení technologie LINQ v jazyce Visual Basic.

Implicitně zadané proměnné.

Namísto určení typu, explicitně deklarovat a proměnnou inicializujete, můžete povolit kompilátor odvodit a přiřadit typu.To se nazývá odvození typu místní.

Proměnné, jejichž typy jsou odvodit jsou silný, stejně jako proměnné typu explicitně zadat.Odvození typu místní funguje pouze při definování místní proměnné uvnitř těla metody.Další informace naleznete v tématu Option Infer – příkaz a Odvození místního typu (Visual Basic).

Následující příklad ukazuje odvození typu místní.Chcete-li použít tento příklad, musíte nastavit Option Infer na On.

' The variable aNumber will be typed as an integer. 
Dim aNumber = 5

' The variable aName will be typed as a String. 
Dim aName = "Virginia"

Odvození typu místní umožňuje vytvořit anonymní typy, které jsou popsány dále v této části a jsou nutné pro LINQ dotazy.

V následujícím příkladu LINQ odvození typu nastává, pokud Option Infer je On nebo Off.Pokud dojde k chybě kompilace Option Infer je Off a Option Strict je On.

' Query example. 
' If numbers is a one-dimensional array of integers, num will be typed 
' as an integer and numQuery will be typed as IEnumerable(Of Integer)-- 
' basically a collection of integers. 

Dim numQuery = From num In numbers
               Where num Mod 2 = 0
               Select num

Inicializátory objektů

Inicializátory objektů se používají ve výrazech dotazu musíte vytvořit anonymní typ pro ukládání výsledků dotazu.Také použitím inicializovat objekty pojmenované typy mimo dotazů.Pomocí objektu inicializátor můžete inicializovat objekt v jediném řádku bez explicitní volání konstruktoru.Za předpokladu, že máte třídu s názvem Customer , který má veřejný Name a Phone vlastnosti, spolu s ostatními vlastnostmi objektu inicializátor lze tímto způsobem:

Dim aCust = New Customer With {.Name = "Mike",
                               .Phone = "555-0212"}

Další informace naleznete v tématu Inicializátory objektů: pojmenované a anonymní typy (Visual Basic).

Anonymní typy

Anonymní typy poskytují pohodlný způsob, jak dočasně seskupit do prvku, který chcete zahrnout do výsledku dotazu sadu vlastností.Můžete zvolit libovolnou kombinaci dostupných polí v dotazu v libovolném pořadí, bez definování pojmenované datový typ prvku.

Anonymní typ je sestavit dynamicky generovaných kompilátorem.Název typu je přiřazena kompilátorem a mohou změnit s každou novou kompilaci.Název proto nelze použít přímo.Anonymní typy jsou inicializovány následujícím způsobem:

' Outside a query. 
Dim product = New With {.Name = "paperclips", .Price = 1.29}

' Inside a query. 
' You can use the existing member names of the selected fields, as was 
' shown previously in the Query Expressions section of this topic. 
Dim londonCusts1 = From cust In customers
                   Where cust.City = "London" 
                   Select cust.Name, cust.Phone

' Or you can specify new names for the selected fields. 
Dim londonCusts2 = From cust In customers
                   Where cust.City = "London" 
                   Select CustomerName = cust.Name,
                   CustomerPhone = cust.Phone

Další informace naleznete v tématu Anonymní typy (Visual Basic).

Rozšíření metody

Rozšíření metody umožňují přidání metod typu dat nebo mimo definici rozhraní.Tato funkce umožňuje, nových metod, přidat do existující typ bez skutečně úpravy typu.Standardní dotaz operátory jsou sami sadu rozšíření metody, které poskytují LINQ dotazu pro každý typ, který implementuje funkci IEnumerable. Other extensions to IEnumerable include Count, Union, and Intersect.

Následující metoda rozšíření přidá metodu tisku String třídy.

' Import System.Runtime.CompilerServices to use the Extension attribute.
<Extension()>
    Public Sub Print(ByVal str As String)
    Console.WriteLine(str)
End Sub

Je volána metoda jako metoda instance běžným String:

Dim greeting As String = "Hello"
greeting.Print()

Další informace naleznete v tématu Metody rozšíření (Visual Basic).

Lambda výrazy

Lambda výraz je funkce bez názvu, který vypočítá a vrátí jednu hodnotu.Na rozdíl od funkce pojmenovaná mohou být definovány a provedeny současně lambda výraz.Následující příklad zobrazí 4.

Console.WriteLine((Function(num As Integer) num + 1)(3))

Můžete přiřadit název proměnné definice výrazu lambda a použijte název volání funkce.Následující příklad zobrazuje také 4.

Dim add1 = Function(num As Integer) num + 1
Console.WriteLine(add1(3))

V LINQ, lambda výrazy základem mnoha provozovatelů standardního dotazu.Kompilátor vytvoří lambda výrazy k zachycení výpočty, které jsou definovány v dotazu základní metody, jako například Where, Select, Order By, Take Whilea další.

Například následující kód definuje dotaz, který vrátí všechny vedoucí studentů ze seznamu studentů.

Dim seniorsQuery = From stdnt In students
                   Where stdnt.Year = "Senior" 
                   Select stdnt

Definice dotazu je kompilován do kódu, který je podobný následující příklad, který používá dva výrazy lambda určení argumentů u Where a Select.

Dim seniorsQuery2 = students.
    Where(Function(st) st.Year = "Senior").
    Select(Function(s) s)

Buď verze lze spustit pomocí For Each smyčky:

For Each senior In seniorsQuery
    Console.WriteLine(senior.Last & ", " & senior.First)
Next

Další informace naleznete v tématu Lambda – výrazy (Visual Basic).

Viz také

Referenční dokumentace

Option Infer – příkaz

Option Strict – příkaz

Koncepty

LINQ a řetězce

Funkce C# podporující LINQ

Další zdroje

LINQ (Language-Integrated Query)

Začínáme s dotazy LINQ v jazyce Visual Basic