Partilhar via


Classificação de operadores de consulta padrão pelo modo de execução

O LINQ a objetos implementações dos métodos de operador de consulta padrão é executado em uma das duas maneiras principais: imediata ou adiada.Os operadores de consulta que usam a execução retardada Além disso podem ser divididos em duas categorias: fluxo contínuo e não-streaming. Se você souber como executar os operadores de consulta diferentes, ele pode ajudá-lo a compreender os resultados que você obteve de uma determinada consulta.Isso é especialmente verdadeiro se a fonte de dados está mudando, ou se você estiver criando uma consulta na parte superior de outra consulta.Este tópico classifica os operadores de consulta padrão de acordo com a sua maneira de execução.

Maneiras de execução

Bb882641.collapse_all(pt-br,VS.110).gifImediata

Execução imediata significa que a fonte de dados é lido e a operação é executada no momento em que o código onde a consulta é declarada.Todos os operadores de consulta padrão que retornam um resultado único e não enumerable executar imediatamente.

Bb882641.collapse_all(pt-br,VS.110).gifFoi adiado

Execução retardada significa que a operação não é executada no momento em que o código onde a consulta é declarada.A operação é executada somente quando a variável de consulta é enumerada, por exemplo, usando um foreach (For Each na Visual Basic) 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 é enumerada várias vezes, os resultados podem diferir de cada vez. Quase todos os operadores de consulta padrão cujo tipo de retorno é IEnumerable<T> ou IOrderedEnumerable<TElement> executar de maneira adiada.

Os operadores de consulta que usam a execução retardada Além disso podem ser classificados como streaming ou não-streaming.

Bb882641.collapse_all(pt-br,VS.110).gifStreaming

Operadores de fluxo contínuo não é necessário ler os dados de origem antes de eles produzem elementos.No momento da execução, um operador de fluxo 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 os elementos de origem até que um elemento de resultado pode ser produzido.Isso significa que mais de um elemento de origem pode ser lido para produzir um elemento de resultado.

Bb882641.collapse_all(pt-br,VS.110).gifNão Streaming.

Operadores de fluxo contínuo não devem ler os dados de origem antes que elas podem produzir um elemento de resultado.Operações como, por exemplo, classificação ou agrupamento se encaixam nessa categoria.No momento da execução, operadores de consulta de streaming não ler os dados de origem, colocá-lo 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 do operador de consulta padrão de acordo com a seu método de execução.

ObservaçãoObservação

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

Operador de consulta padrão

Tipo de retorno

Execução imediata

Fluxo de execução retardada

Adiar a execução não Streaming

Aggregate

TSource

X

 

 

All<TSource>

Boolean

X

 

 

Any

Boolean

X

 

 

AsEnumerable<TSource>

IEnumerable<T>

 

X

 

Average

Único valor numérico

X

 

 

Cast<TResult>

IEnumerable<T>

 

X

 

Concat<TSource>

IEnumerable<T>

 

X

 

Contains

Boolean

X

 

 

Count

Int32

X

 

 

DefaultIfEmpty

IEnumerable<T>

 

X

 

Distinct

IEnumerable<T>

 

X

 

ElementAt<TSource>

TSource

X

 

 

ElementAtOrDefault<TSource>

TSource

X

 

 

Empty<TResult>

IEnumerable<T>

X

 

 

Except

IEnumerable<T>

 

X

 X

First

TSource

X

 

 

FirstOrDefault

TSource

X

 

 

GroupBy

IEnumerable<T>

 

 

X

GroupJoin

IEnumerable<T>

 

X

Intersect

IEnumerable<T>

 

X

X

Join

IEnumerable<T>

 

X

X

Last

TSource

X

 

 

LastOrDefault

TSource

X

 

 

LongCount

Int64

X

 

 

Max

Único valor numérico, TSource ou TResult

X

 

 

Min

Único valor numérico, TSource ou TResult

X

 

 

OfType<TResult>

IEnumerable<T>

 

X

 

OrderBy

IOrderedEnumerable<TElement>

 

 

X

OrderByDescending

IOrderedEnumerable<TElement>

 

 

X

Range

IEnumerable<T>

 

X

 

Repeat<TResult>

IEnumerable<T>

 

X

 

Reverse<TSource>

IEnumerable<T>

 

 

X

Select

IEnumerable<T>

 

X

 

SelectMany

IEnumerable<T>

 

X

 

SequenceEqual

Boolean

X

 

 

Single

TSource

X

 

 

SingleOrDefault

TSource

X

 

 

Skip<TSource>

IEnumerable<T>

 

X

 

SkipWhile

IEnumerable<T>

 

X

 

Sum

Único valor numérico

X

 

 

Take<TSource>

IEnumerable<T>

 

X

 

TakeWhile

IEnumerable<T>

 

X

 

ThenBy

IOrderedEnumerable<TElement>

 

 

X

ThenByDescending

IOrderedEnumerable<TElement>

 

 

X

ToArray<TSource>

Matriz de TSource

X

 

 

ToDictionary

Dictionary<TKey, TValue>

X

 

 

ToList<TSource>

IList<T>

X

 

 

ToLookup

ILookup<TKey, TElement>

X

 

 

Union

IEnumerable<T>

 

X

 

Where

IEnumerable<T>

 

X

 

Consulte também

Referência

Enumerable

Conceitos

Visão geral operadores de consulta padrão

Sintaxe de expressão de consulta para operadores de consulta padrão

LINQ to Objects