Přehled standardních operátorů dotazů (Visual Basic)

Standardní operátory dotazu jsou metody, které tvoří vzor LINQ. Většina těchto metod pracuje s sekvencemi, kde sekvence je objekt, jehož typ implementuje IEnumerable<T> rozhraní nebo IQueryable<T> rozhraní. Standardní operátory dotazů poskytují možnosti dotazu, včetně filtrování, projekce, agregace, řazení a dalších možností.

Existují dvě sady standardních operátorů dotazu LINQ, jedna, která pracuje s objekty typu IEnumerable<T> a druhou, která pracuje s objekty typu IQueryable<T>. Metody, které tvoří každou sadu, jsou statické členy Enumerable a Queryable třídy v uvedeném pořadí. Jsou definovány jako rozšiřující metody typu, na kterém pracují. To znamená, že je lze volat pomocí syntaxe statické metody nebo syntaxe metody instance.

Kromě toho několik standardních metod operátoru dotazu funguje na jiných typech než na základě IEnumerable<T> nebo IQueryable<T>. Typ Enumerable definuje dvě takové metody, které oba pracují s objekty typu IEnumerable. Tyto metody Cast<TResult>(IEnumerable) a OfType<TResult>(IEnumerable)umožňují povolit, aby se v modelu LINQ dotazovala kolekce, která není parametrizovaná nebo ne generická. Dělají to vytvořením kolekce objektů silného typu. Třída Queryable definuje dvě podobné metody, Cast<TResult>(IQueryable) a OfType<TResult>(IQueryable), které pracují s objekty typu Queryable.

Standardní operátory dotazů se liší v načasování jejich provádění v závislosti na tom, jestli vrací jednu hodnotu nebo posloupnost hodnot. Tyto metody, které vrátí jednu hodnotu (například Average a Sum) se spustí okamžitě. Metody, které vracejí sekvenci odloží provádění dotazu a vrátí výčtový objekt.

V případě metod, které pracují s kolekcemi v paměti, to znamená těch metod, které rozšiřují IEnumerable<T>, vrácený výčtový objekt zachycuje argumenty, které byly předány metodě. Při výčtu tohoto objektu se použije logika operátoru dotazu a vrátí se výsledky dotazu.

Naproti tomu metody, které rozšiřují, neimplementují IQueryable<T> žádné chování při dotazování, ale sestavte strom výrazu, který představuje dotaz, který se má provést. Zpracování dotazu zpracovává zdrojový IQueryable<T> objekt.

Volání metod dotazů je možné zřetědět v jednom dotazu, což umožňuje, aby se dotazy staly libovolně složité.

Následující příklad kódu ukazuje, jak lze standardní operátory dotazu použít k získání informací o sekvenci.

Dim sentence = "the quick brown fox jumps over the lazy dog"
' Split the string into individual words to create a collection.
Dim words = sentence.Split(" "c)

Dim query = From word In words
            Group word.ToUpper() By word.Length Into gr = Group
            Order By Length _
            Select Length, GroupedWords = gr

Dim output As New System.Text.StringBuilder
For Each obj In query
    output.AppendLine(String.Format("Words of length {0}:", obj.Length))
    For Each word As String In obj.GroupedWords
        output.AppendLine(word)
    Next
Next

'Display the output
MsgBox(output.ToString())

' This code example produces the following output:
'
' Words of length 3:
' THE
' FOX
' THE
' DOG
' Words of length 4:
' OVER
' LAZY
' Words of length 5:
' QUICK
' BROWN
' JUMPS

Syntaxe výrazu dotazu

Některé z častěji používaných standardních operátorů dotazů mají vyhrazenou syntaxi klíčových slov jazyka C# a Jazyk Visual Basic, která je umožňuje volat jako součást výrazu dotazu. Další informace o standardních operátorech dotazů, které mají vyhrazená klíčová slova a jejich odpovídající syntaxe, naleznete v tématu Syntaxe výrazů dotazu pro standardní operátory dotazů (Visual Basic).

Rozšíření standardních operátorů dotazů

Sadu standardních operátorů dotazů můžete rozšířit vytvořením metod specifických pro doménu, které jsou vhodné pro cílovou doménu nebo technologii. Standardní operátory dotazů můžete také nahradit vlastními implementacemi, které poskytují další služby, jako je vzdálené vyhodnocení, překlad dotazů a optimalizace. Podívejte se AsEnumerable na příklad.

Následující odkazy vás převezmou na témata, která poskytují další informace o různých standardních operátorech dotazů na základě funkčnosti.

Viz také