Partilhar via


Visão geral dos 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 operam em sequências, onde uma sequência é um objeto cujo tipo implementa a IEnumerable<T> interface ou a IQueryable<T> interface. 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 outro que opera em objetos do tipo IQueryable<T>. Os métodos que compõem cada conjunto são membros estáticos das Enumerable classes e Queryable , respectivamente. Eles são definidos como métodos de extensão do tipo em que operam. Isso significa que eles podem ser chamados usando a sintaxe do método estático ou a sintaxe do método da 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 Enumerable tipo define dois desses métodos que operam em objetos do tipo IEnumerable. Esses métodos Cast<TResult>(IEnumerable) e OfType<TResult>(IEnumerable)o , permitem que você habilite uma coleção não parametrizada ou não genérica para ser consultada no padrão LINQ. Eles fazem isso criando uma coleção fortemente tipada de objetos. A Queryable classe 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 diferem no tempo de sua execução, dependendo se eles retornam um valor singleton ou uma sequência de valores. Os 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 dos métodos que operam em coleções na memória, ou seja, os métodos que se estendem IEnumerable<T>, o objeto enumerável retornado captura os argumentos que foram passados 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 se 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 da consulta é manipulado pelo objeto de origem IQueryable<T> .

As chamadas para métodos de consulta podem ser encadeadas em uma consulta, o que permite que as 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 da expressão de consulta

Alguns dos operadores de consulta padrão usados com mais freqüência têm sintaxe de palavra-chave de linguagem C# e Visual Basic dedicada que permite 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 que são apropriados para seu 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, tradução de consultas e otimização. Veja AsEnumerable um exemplo.

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.

Consulte também