Share via


Visão geral de operadores de consulta padrão

The operadores de consulta padrão são os métodos que formam o LINQ (consulta integrada à linguagem) padrão. A maioria desses métodos operam em seqüências, onde uma sequência é um objeto cujo tipo implementa o 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 LINQ operadores de consulta padrão, que opera em objetos do tipo IEnumerable<T> e o Outros que opera em objetos do tipo IQueryable<T>. Os métodos que compõem cada conjunto de membros estático do sãoEnumerable e Queryable classes, respectivamente. Eles são definidos sistema autônomo métodos de extensão do tipo que eles operam em.Isso significa que eles podem ser chamados usando a sintaxe do método estático ou sintaxe do método de instância.

Além disso, vários métodos de operador de consulta padrão operam em tipos diferentes daqueles com base em IEnumerable<T> ou IQueryable<T>. The Enumerable tipo define dois métodos esses que ambas operam em objetos do tipo IEnumerable. Esses métodos, Cast<TResult>(IEnumerable) e OfType<TResult>(IEnumerable), permitem uma coleção sem parâmetros ou não-genéricas, sejam consultados de você ativar o LINQ padrão. Eles fazem isso criando uma coleção fortemente tipada de objetos.The 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 são diferentes na temporização da sua execução, dependendo se elas retornam um valor único ou uma sequência de valores.Esses métodos que retornam um valor único (por exemplo, Average e Sum) executar imediatamente. Métodos que retornam uma sequência de adiar 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, esses métodos 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, métodos que estendem IQueryable<T> não implementar qualquer comportamento ao consultar, mas criar uma árvore de expressão que representa a consulta seja executada. O processamento de consulta é tratado pela fonte de IQueryable<T> objeto.

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

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 As String = "the quick brown fox jumps over the lazy dog"
' Split the string into individual words to create a collection.
Dim words As String() = 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 

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

// Using query expression syntax.
var query = from word in words
            group word.ToUpper() by word.Length into gr
            orderby gr.Key
            select new { Length = gr.Key, Words = gr };

// Using method-based query syntax.
var query2 = words.
    GroupBy(w => w.Length, w => w.ToUpper()).
    Select(g => new { Length = g.Key, Words = g }).
    OrderBy(o => o.Length);

foreach (var obj in query)
{
    Console.WriteLine("Words of length {0}:", obj.Length);
    foreach (string word in obj.Words)
        Console.WriteLine(word);
}

// 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

Some of the more frequently used standard query operators have dedicated C# and Visual Basic language keyword syntax that enables them to be called as part of a query expression.Para obter mais informações sobre os operadores de consulta padrão que têm palavras-chave e suas sintaxes correspondentes dedicados, consulte Sintaxe de expressão de consulta para operadores de consulta padrão.

Estendendo os operadores de consulta padrão

Você pode aumentar o conjunto de operadores de consulta padrão pelos métodos específicos do domínio criando que são apropriados para seu domínio de destino ou tecnologia.Você também pode substituir sistema autônomo operadores de consulta padrão com suas próprias implementações que fornecem serviços adicionais, sistema autônomo avaliação remota, tradução da consulta e otimização.Consulte AsEnumerable<TSource> para um exemplo.

Seções relacionadas

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

Classificando Dados

Operações de conjunto

Filtragem de dados

Operações de quantificador

Operações de projeção

Particionamento de dados

Ingressar em operações

Agrupando dados

Geração de operações

Operações de igualdade

Operações de elemento

Converter tipos de dados

Operações de concatenação

Operações de agregação

Consulte também

Conceitos

Introdução às consultas do LINQ

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

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

Métodos de extensão (Visual Basic)

Referência

Enumerable

Queryable

Métodos de extensão (Guia de programação C#)