Sdílet prostřednictvím


Klasifikace standardních operátorů dotazů způsobem provádění (Visual Basic)

Implementace LINQ to Objects standardních metod operátoru dotazu se provádějí jedním ze dvou hlavních způsobů: okamžitě nebo odloženo. Operátory dotazů, které používají odložené spouštění, je navíc možné rozdělit do dvou kategorií: streamování a nestreamové streamování. Pokud víte, jak se provádějí různé operátory dotazů, může vám pomoct pochopit výsledky, které získáte z daného dotazu. To platí zejména v případě, že se zdroj dat mění nebo vytváříte dotaz nad jiným dotazem. Toto téma klasifikuje standardní operátory dotazů podle jejich způsobu provádění.

Způsoby provádění

Okamžité

Okamžité spuštění znamená, že je zdroj dat přečtený a operace se provádí v okamžiku v kódu, ve kterém je dotaz deklarován. Všechny standardní operátory dotazu, které vrací jeden nečíslitelný výsledek, se spustí okamžitě.

Odloženo

Odložené spuštění znamená, že operace není provedena v okamžiku v kódu, ve kterém je dotaz deklarován. Operace se provádí pouze v případě, že je proměnná dotazu vyčíslována, například pomocí For Each příkazu. To znamená, že výsledky provádění dotazu závisejí na obsahu zdroje dat, když se dotaz spustí, a ne při definování dotazu. Pokud je proměnná dotazu vyčíslována vícekrát, výsledky se můžou pokaždé lišit. Téměř všechny standardní operátory dotazu, jejichž návratový typ je IEnumerable<T> nebo IOrderedEnumerable<TElement> spouští odloženým způsobem.

Operátory dotazů, které používají odložené spuštění, lze dále klasifikovat jako streamovací nebo nestreamovací.

Streamování

Operátory streamování nemusí před načtením prvků číst všechna zdrojová data. V době provádění provádí operátor streamování svou operaci na každém zdrojovém prvku při jeho čtení a pokud je to vhodné, poskytuje prvek. Operátor streamování nadále čte zdrojové elementy, dokud nebude možné vytvořit výsledný prvek. To znamená, že za účelem vytvoření jednoho výsledného prvku může být přečteno více než jeden zdrojový prvek.

Bez streamování

Ne-streamovací operátory musí přečíst všechna zdrojová data, než mohou vytvořit výsledný prvek. Operace, jako je řazení nebo seskupení, spadají do této kategorie. V době provedení čtou operátory dotazů bez použití streamování všechna zdrojová data, umístí je do datové struktury, provedou operaci a poskytnou výsledné prvky.

Tabulka klasifikace

Následující tabulka klasifikuje každou standardní metodu operátoru dotazu podle metody provádění.

Poznámka:

Pokud je operátor označený ve dvou sloupcích, jsou do operace zapojeny dvě vstupní sekvence a každá sekvence se vyhodnotí jinak. V těchto případech je to vždy první sekvence v seznamu parametrů, která se vyhodnocuje odloženým a streamovaným způsobem.

Standardní operátor dotazu Návratový typ Okamžité spuštění Odložené spuštění streamování Odložené provádění bez streamování
Aggregate Zdroj dat X
All Boolean X
Any Boolean X
AsEnumerable IEnumerable<T> X
Average Jedna číselná hodnota X
Cast IEnumerable<T> X
Concat IEnumerable<T> X
Contains Boolean X
Count Int32 X
DefaultIfEmpty IEnumerable<T> X
Distinct IEnumerable<T> X
ElementAt Zdroj dat X
ElementAtOrDefault Zdroj dat X
Empty IEnumerable<T> X
Except IEnumerable<T> X X
First Zdroj dat X
FirstOrDefault Zdroj dat X
GroupBy IEnumerable<T> X
GroupJoin IEnumerable<T> X X
Intersect IEnumerable<T> X X
Join IEnumerable<T> X X
Last Zdroj dat X
LastOrDefault Zdroj dat X
LongCount Int64 X
Max Jedna číselná hodnota, TSource nebo TResult X
Min Jedna číselná hodnota, TSource nebo TResult X
OfType IEnumerable<T> X
OrderBy IOrderedEnumerable<TElement> X
OrderByDescending IOrderedEnumerable<TElement> X
Range IEnumerable<T> X
Repeat IEnumerable<T> X
Reverse IEnumerable<T> X
Select IEnumerable<T> X
SelectMany IEnumerable<T> X
SequenceEqual Boolean X
Single Zdroj dat X
SingleOrDefault Zdroj dat X
Skip IEnumerable<T> X
SkipWhile IEnumerable<T> X
Sum Jedna číselná hodnota X
Take IEnumerable<T> X
TakeWhile IEnumerable<T> X
ThenBy IOrderedEnumerable<TElement> X
ThenByDescending IOrderedEnumerable<TElement> X
ToArray Pole typu TSource X
ToDictionary Dictionary<TKey,TValue> X
ToList IList<T> X
ToLookup ILookup<TKey,TElement> X
Union IEnumerable<T> X
Where IEnumerable<T> X

Viz také