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.