Partilhar via


Classificação de operadores de consulta padrão por maneira de execução (Visual Basic)

As implementações LINQ to Objects dos métodos de operador de consulta padrão são executadas de duas maneiras principais: imediata ou adiada. Os operadores de consulta que usam execução adiada podem ser adicionalmente divididos em duas categorias: streaming e non-streaming. Se você souber como os diferentes operadores de consulta são executados, isso pode ajudá-lo a entender os resultados que você obtém de uma determinada consulta. Isso é especialmente verdadeiro se a fonte de dados estiver mudando ou se você estiver criando uma consulta sobre outra consulta. Este tópico classifica os operadores de consulta padrão de acordo com sua maneira de execução.

Modos de Execução

Imediata

A execução imediata significa que a fonte de dados é lida e a operação é executada no ponto do código onde a consulta é declarada. Todos os operadores de consulta padrão que retornam um único resultado não enumerável são executados imediatamente.

Adiado

Execução adiada significa que a operação não é executada no ponto do código onde a consulta é declarada. A operação é executada somente quando a variável de consulta é enumerada, por exemplo, usando uma For Each instrução. Isso significa que os resultados da execução da consulta dependem do conteúdo da fonte de dados quando a consulta é executada e não quando a consulta é definida. Se a variável de consulta for enumerada várias vezes, os resultados poderão diferir sempre. Quase todos os operadores de consulta padrão cujo tipo de retorno é IEnumerable<T> ou IOrderedEnumerable<TElement> são executados de maneira diferida.

Os operadores de consulta que usam execução adiada podem ser adicionalmente classificados como streaming ou não-streaming.

Transmissão

Os operadores de streaming não têm de ler todos os dados de origem antes de produzirem elementos. No momento da execução, um operador de streaming executa sua operação em cada elemento de origem à medida que é lido e produz o elemento se apropriado. Um operador de streaming continua a ler os elementos de origem até que um elemento de resultado possa ser produzido. Isso significa que mais de um elemento de origem pode ser lido para produzir um elemento de resultado.

Não-Streaming

Os operadores que não fazem streaming devem ler todos os dados de origem antes de poderem produzir um elemento de resultado. Operações como classificação ou agrupamento se enquadram nessa categoria. No momento da execução, os operadores de consulta que não fazem streaming leem todos os dados de origem, colocam-nos em uma estrutura de dados, executam a operação e produzem os elementos resultantes.

Tabela de Classificação

A tabela a seguir classifica cada método de operador de consulta padrão de acordo com seu método de execução.

Nota

Se um operador é marcado em duas colunas, duas sequências de entrada estão envolvidas na operação, e cada sequência é avaliada de forma diferente. Nestes casos, é sempre a primeira sequência na lista de parâmetros que é avaliada de forma diferida e em streaming.

Operador de consulta padrão Tipo de Retorno Execução Imediata Execução de streaming adiada Execução adiada sem streaming
Aggregate Ource X
All Boolean X
Any Boolean X
AsEnumerable IEnumerable<T> X
Average Valor numérico único X
Cast IEnumerable<T> X
Concat IEnumerable<T> X
Contains Boolean X
Count Int32 X
DefaultIfEmpty IEnumerable<T> X
Distinct IEnumerable<T> X
ElementAt Ource X
ElementAtOrDefault Ource X
Empty IEnumerable<T> X
Except IEnumerable<T> X X
First Ource X
FirstOrDefault Ource X
GroupBy IEnumerable<T> X
GroupJoin IEnumerable<T> X X
Intersect IEnumerable<T> X X
Join IEnumerable<T> X X
Last Ource X
LastOrDefault Ource X
LongCount Int64 X
Max Valor numérico único, TSource ou TResult X
Min Valor numérico único, TSource ou 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 Ource X
SingleOrDefault Ource X
Skip IEnumerable<T> X
SkipWhile IEnumerable<T> X
Sum Valor numérico único X
Take IEnumerable<T> X
TakeWhile IEnumerable<T> X
ThenBy IOrderedEnumerable<TElement> X
ThenByDescending IOrderedEnumerable<TElement> X
ToArray Matriz TSource X
ToDictionary Dictionary<TKey,TValue> X
ToList IList<T> X
ToLookup ILookup<TKey,TElement> X
Union IEnumerable<T> X
Where IEnumerable<T> X

Consulte também