Compartilhar via


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

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

Maneiras de execução

Imediato

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

Adiado

A execução adiada significa que a operação não é executada no ponto no código em que 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 em vez de quando a consulta é definida. Se a variável de consulta for enumerada várias vezes, os resultados poderão ser diferentes sempre. Quase todos os operadores de consulta padrão cujo tipo de retorno é IEnumerable<T> ou IOrderedEnumerable<TElement> são executados de forma adiada.

Operadores de consulta que usam a execução adiada podem ser classificados adicionalmente como streaming ou não streaming.

Transmissão ao vivo

Os operadores de streaming não precisam 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 conforme ele é lido e produz o elemento, se apropriado. Um operador de streaming continua a ler 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 não streaming devem ler todos os dados de origem antes de produzirem um elemento de resultado. Operações como classificação ou agrupamento se enquadram nessa categoria. No momento da execução, os operadores de consulta não streaming leem todos os dados de origem, colocam-nos em uma estrutura de dados, realizam a operação e geram os elementos de resultado.

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.

Observação

Se um operador for marcado em duas colunas, duas sequências de entrada estarão envolvidas na operação e cada sequência será avaliada de forma diferente. Nesses casos, é sempre a primeira sequência na lista de parâmetros que é avaliada de maneira adiada e de streaming.

Operador de consulta padrão Tipo de retorno Execução imediata Execução de streaming adiada Execução adiada de não streaming
Aggregate TSource 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 TSource X
ElementAtOrDefault TSource X
Empty IEnumerable<T> X
Except IEnumerable<T> X X
First TSource X
FirstOrDefault TSource X
GroupBy IEnumerable<T> X
GroupJoin IEnumerable<T> X X
Intersect IEnumerable<T> X X
Join IEnumerable<T> X X
Last TSource X
LastOrDefault TSource 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 TSource X
SingleOrDefault TSource 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 de 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