Compartilhar via


Visão geral de operadores de consulta padrão (Visual Basic)

Os operadores de consulta padrão são os métodos que formam o padrão LINQ. A maioria desses métodos opera em sequências; neste contexto, uma sequência é um objeto cujo tipo implementa a interface IEnumerable<T> ou a interface IQueryable<T>. Os operadores de consulta padrão fornecem recursos de consulta incluindo filtragem, projeção, agregação, classificação e muito mais.

Há dois conjuntos de operadores de consulta padrão LINQ, um que opera em objetos do tipo IEnumerable<T> e o outro que opera em objetos do tipo IQueryable<T>. Os métodos que compõem a cada conjunto são os membros estáticos das classes Enumerable e Queryable, respectivamente. Eles são definidos como métodos de extensão do tipo nos quais operam. Isso significa que eles podem ser chamados usando a sintaxe de método estático ou sintaxe de método de instância.

Além disso, vários métodos de operador de consulta padrão operam em tipos diferentes daqueles baseados em IEnumerable<T> ou IQueryable<T>. O tipo Enumerable define dois métodos tais que ambos operam em objetos do tipo IEnumerable. Esses métodos, Cast<TResult>(IEnumerable) e OfType<TResult>(IEnumerable), permitem que você habilite uma coleção sem parâmetros ou não genérica, a ser consultada no padrão LINQ. Eles fazem isso criando uma coleção de objetos fortemente tipada. A classe Queryable define dois métodos semelhantes, Cast<TResult>(IQueryable) e OfType<TResult>(IQueryable), que operam em objetos do tipo Queryable.

Os operadores de consulta padrão são diferentes no momento de sua execução, dependendo de se eles retornam um valor singleton ou uma sequência de valores. Esses métodos que retornam um valor singleton (por exemplo, Average e Sum) são executados imediatamente. Os métodos que retornam uma sequência adiam a execução da consulta e retornam um objeto enumerável.

No caso de métodos que operam em coleções na memória, ou seja, os métodos que estendem IEnumerable<T>, o objeto enumerável retornado captura o argumento que foi passado para o método. Quando esse objeto é enumerado, a lógica do operador de consulta é empregada e os resultados da consulta são retornados.

Por outro lado, os métodos que estendem IQueryable<T> não implementam nenhum comportamento de consulta, mas criam uma árvore de expressão que representa a consulta a ser executada. O processamento de consulta é tratado pelo objeto IQueryable<T> de origem.

Chamadas para métodos de consulta podem ser encadeadas em uma consulta, o que permite que consultas se tornem arbitrariamente complexas.

O exemplo de código a seguir demonstra como os operadores de consulta padrão podem ser usados para obter informações sobre uma sequência.

Dim sentence = "the quick brown fox jumps over the lazy dog"
' Split the string into individual words to create a collection.
Dim words = sentence.Split(" "c)

Dim query = From word In words
            Group word.ToUpper() By word.Length Into gr = Group
            Order By Length _
            Select Length, GroupedWords = gr

Dim output As New System.Text.StringBuilder
For Each obj In query
    output.AppendLine(String.Format("Words of length {0}:", obj.Length))
    For Each word As String In obj.GroupedWords
        output.AppendLine(word)
    Next
Next

'Display the output
MsgBox(output.ToString())

' This code example produces the following output:
'
' Words of length 3:
' THE
' FOX
' THE
' DOG
' Words of length 4:
' OVER
' LAZY
' Words of length 5:
' QUICK
' BROWN
' JUMPS

Sintaxe de expressão de consulta

Alguns dos operadores de consulta padrão mais usados têm uma sintaxe de palavra-chave de linguagem C# e Visual Basic dedicada que possibilita que eles sejam chamados como parte de uma expressão de consulta. Para obter mais informações sobre operadores de consulta padrão que têm palavras-chave dedicadas e suas sintaxes correspondentes, consulte Sintaxe de Expressão de Consulta para Operadores de Consulta Padrão (Visual Basic).

Estendendo os operadores de consulta padrão

Você pode aumentar o conjunto de operadores de consulta padrão criando métodos específicos de domínio apropriados para o domínio ou tecnologia de destino. Você também pode substituir os operadores de consulta padrão por suas próprias implementações que fornecem serviços adicionais, como avaliação remota, conversão de consulta e otimização. Para ver um exemplo, consulte AsEnumerable.

Os links a seguir levam você a tópicos que fornecem informações adicionais sobre os vários operadores de consulta padrão com base na funcionalidade.

Confira também