Přehled standardních operátorů dotazů (C#)
Standardní operátory dotazu jsou metody, které tvoří vzor LINQ. Většina těchto metod pracuje se sekvencemi, kde sekvence je objekt, jehož typ implementuje IEnumerable<T> rozhraní nebo IQueryable<T> rozhraní. Standardní operátory dotazů poskytují možnosti dotazů, včetně filtrování, projekce, agregace, řazení a dalších.
Existují dvě sady standardních operátorů dotazu LINQ: jednu, která pracuje s objekty typu , druhá pracuje s IEnumerable<T> objekty typu IQueryable<T> . Metody, které tvoří jednotlivé sady, jsou statickými členy tříd Enumerable Queryable a . Jsou definovány jako rozšiřující metody typu, se kterou pracují. Rozšiřující metody lze volat pomocí syntaxe statických metod nebo syntaxe metody instance.
Kromě toho několik standardních metod operátoru dotazu pracuje s jinými typy, než jsou metody založené na IEnumerable<T> nebo IQueryable<T> . Typ Enumerable definuje dvě takové metody, které pracují s objekty typu IEnumerable . Tyto metody a umožňují povolit neparametrizovanou nebo neobecná kolekci pro dotazování Cast<TResult>(IEnumerable) OfType<TResult>(IEnumerable) ve vzoru LINQ. Dělají to tak, že vytvoří kolekci objektů se silnými typy. Třída definuje dvě podobné metody, a Queryable , které pracují s Cast<TResult>(IQueryable) OfType<TResult>(IQueryable) objekty typu IQueryable .
Standardní operátory dotazu se liší v načasování jejich spuštění v závislosti na tom, jestli vracejí jednu hodnotu nebo posloupnost hodnot. Metody, které vrací jednu hodnotu (například a ), se Average Sum spustí okamžitě. Metody, které vracejí sekvenci, odložit provádění dotazu a vrátit vyčíslitelný objekt.
Pro metody, které pracují s kolekcemi v paměti, to znamená metody, které rozšiřují , zachycuje vrácený vyčíslitelný objekt argumenty, které byly předány IEnumerable<T> 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é IQueryable<T> rozšiřují, neimplementují žádné chování při dotazování. Sestaví strom výrazů, který představuje dotaz, který se má provést. Zpracování dotazu zpracovává zdrojový IQueryable<T> objekt.
Volání metod dotazů mohou být zřetězována v jednom dotazu, což umožňuje, aby dotazy byly libovolně složité.
Následující příklad kódu ukazuje, jak lze použít standardní operátory dotazu k získání informací o sekvenci.
string sentence = "the quick brown fox jumps over the lazy dog";
// Split the string into individual words to create a collection.
string[] words = sentence.Split(' ');
// Using query expression syntax.
var query = from word in words
group word.ToUpper() by word.Length into gr
orderby gr.Key
select new { Length = gr.Key, Words = gr };
// Using method-based query syntax.
var query2 = words.
GroupBy(w => w.Length, w => w.ToUpper()).
Select(g => new { Length = g.Key, Words = g }).
OrderBy(o => o.Length);
foreach (var obj in query)
{
Console.WriteLine("Words of length {0}:", obj.Length);
foreach (string word in obj.Words)
Console.WriteLine(word);
}
// 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ýrazů dotazů
Některé z nejčastěji používaných standardních operátorů dotazů mají vyhrazenou syntaxi klíčových slov jazyka C# Visual Basic jazyka, která umožňuje jejich volání 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, najdete v tématu Syntaxe výrazů dotazů pro standardní operátory dotazů (C#).
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 vaši 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. Příklad AsEnumerable najdete v tématu .
Související oddíly
Na následujících odkazech najdete články, které poskytují další informace o různých standardních operátorech dotazů založených na funkcích.