Información general sobre operadores de consulta estándar

Actualización: noviembre 2007

Los operadores de consulta estándar son los métodos que forman el modelo de Language-Integrated Query (LINQ). La mayoría de estos métodos funciona en secuencias, donde una secuencia es un objeto cuyo tipo implementa la interfaz IEnumerable<T>o la interfaz IQueryable<T>. Los operadores de consulta estándar proporcionan capacidades de consulta que incluyen filtrado, proyección, agregación, ordenación y otras.

Hay dos conjuntos de operadores de consulta estándar de LINQ, uno que funciona sobre objetos de tipo IEnumerable<T> y otro que funciona sobre objetos de tipo IQueryable<T>. Los métodos que constituyen cada conjunto son miembros estáticos de las clases Enumerable y Queryable, respectivamente. Se definen como métodos de extensión del tipo sobre el que operan. Esto significa que se pueden llamar utilizando sintaxis del método estático o sintaxis del método de instancia.

Además, varios métodos de operador de consulta estándar funcionan con tipos distintos de los que se basan en IEnumerable<T> o IQueryable<T>. El tipo Enumerable define dos de esos métodos, que operan sobre objetos de tipo IEnumerable. Estos métodos, Cast<TResult>(IEnumerable) y OfType<TResult>(IEnumerable), permiten que una colección no parametrizada, o no genérica, pueda ser consultada en el modelo de LINQ. Esto lo consiguen creando una colección de objetos con establecimiento inflexible de tipos. La clase Queryable define dos métodos similares, Cast<TResult>(IQueryable) y OfType<TResult>(IQueryable), que operan sobre objetos de tipo Queryable.

Los operadores de consulta estándar difieren en el momento de su ejecución, dependiendo de si devuelven un valor singleton o una secuencia de valores. Los métodos que devuelven un valor singleton (por ejemplo, Average y Sum) se ejecutan inmediatamente. Los métodos que devuelven una secuencia retrasan la ejecución de la consulta y devuelven un objeto enumerable.

En el caso de los métodos que operan sobre colecciones en memoria, es decir, aquellos métodos que extienden IEnumerable<T>, el objeto enumerable devuelto captura los argumentos que se pasaron al método. Cuando se enumera ese objeto, se emplea la lógica del operador de consulta y se devuelven los resultados de la consulta.

En contraste, los métodos que extienden IQueryable<T> no implementan cualquier comportamiento de consulta, sino que generan un árbol de expresión que representa la consulta que se va a realizar. El procesamiento de la consulta es administrado por el objeto IQueryable<T> del origen.

Las llamadas a métodos de consulta se pueden encadenar juntas en una sola consulta, lo cual permite hacer consultas arbitrariamente complejas.

El ejemplo de código siguiente muestra cómo se pueden utilizar los operadores de consulta estándar para obtener información sobre una secuencia.

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 

Sintaxis de las expresiones de consulta

Algunos de los operadores de consulta estándar utilizados con mayor frecuencia tienen una sintaxis de palabras clave dedicadas del lenguaje C# y Visual Basic que permite llamarlos como parte de una expresión de consulta. Para obtener más información sobre los operadores de consulta estándar que poseen palabras clave dedicadas y sus sintaxis correspondientes, vea Sintaxis de las expresiones de consulta para operadores de consulta estándar.

Extender los operadores de consulta estándar

Puede aumentar el conjunto de operadores de consulta estándar creando métodos específicos del dominio que sean adecuados para su tecnología o dominio de destino. También puede reemplazar los operadores de consulta estándar con sus propias implementaciones que proporcionen servicios adicionales como evaluación remota, traducción de consultas y optimización. Vea AsEnumerable<TSource> para obtener un ejemplo.

Secciones relacionadas

Los vínculos siguientes conducen a temas que proporcionan información adicional sobre los diversos operadores de consulta estándar según la funcionalidad.

Ordenar datos

Operaciones Set

Filtrar datos

Operaciones cuantificadoras

Operaciones de proyección

Realizar particiones de datos

Operaciones de combinación

Agrupar datos

Operaciones de generación

Operaciones de igualdad

Operaciones de elementos

Convertir tipos de datos

Operaciones de concatenación

Operaciones de agregación

Vea también

Conceptos

Introducción a consultas con LINQ

Sintaxis de las expresiones de consulta para operadores de consulta estándar

Clasificación de operadores de consulta estándar por modo de ejecución

Métodos de extensión (Visual Basic)

Referencia

Enumerable

Queryable

Métodos de extensión (Guía de programación de C#)