Información general sobre operadores de consulta estándar (C#)

Los operadores de consulta estándar son los métodos que constituyen el modelo 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 ofrecen funcionalidades de consulta, como las funciones de filtrado, proyección, agregación y ordenación, entre otras.

Hay dos conjuntos de operadores de consulta estándar de LINQ: uno que actúa sobre objetos de tipo IEnumerable<T> y otro sobre objetos de tipo IQueryable<T>. Los métodos que forman cada conjunto son miembros estáticos de las clases Enumerable y Queryable, respectivamente. Se definen como métodos de extensión del tipo en el que actúan. Se puede llamar a los métodos de extensión mediante sintaxis de método estático o sintaxis de método de instancia.

Además, varios métodos de operador de consulta estándar funcionan en tipos distintos de los que se basan en IEnumerable<T> o IQueryable<T>. El tipo Enumerable define dos métodos que funcionan en objetos de tipo IEnumerable. Estos métodos, Cast<TResult>(IEnumerable) y OfType<TResult>(IEnumerable), le permiten habilitar una colección no genérica o no parametrizada para consultarse en el patrón LINQ. Para ello, se crea una colección de objetos fuertemente tipados. La clase Queryable define dos métodos similares, Cast<TResult>(IQueryable) y OfType<TResult>(IQueryable), que funcionan en objetos de tipo IQueryable.

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

En el caso de los métodos que actúan en colecciones en memoria, es decir, los métodos que extienden IEnumerable<T>, el objeto enumerable devuelto captura los argumentos que se han pasado 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 cambio, los métodos que extienden IQueryable<T> no implementan ningún comportamiento de realización de consultas. Compilan un árbol de expresión que representa la consulta que se va a realizar. El procesamiento de consultas se controla mediante el objeto IQueryable<T> de origen.

Las llamadas a métodos de consulta se pueden encadenar juntas en una consulta, lo que permite que las consultas se conviertan en complejas de forma arbitraria.

En el ejemplo de código siguiente se muestra el uso de los operadores de consulta estándar para obtener información sobre una secuencia.

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 expresiones de consulta

Algunos de los operadores de consulta estándar que se usan con más frecuencia tienen una sintaxis especial de palabras clave dedicadas de lenguaje C# y Visual Basic para que se puedan invocar como parte de una expresión de consulta. Para obtener más información sobre los operadores de consulta estándar que incluyen palabras clave dedicadas y sus sintaxis correspondientes, vea Sintaxis de las expresiones de consulta para operadores de consulta estándar (C#).

Extender los operadores de consulta estándar

Puede aumentar el conjunto de operadores de consulta estándar creando métodos específicos de 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 otros servicios tales como evaluación remota, traducción de consultas y optimización. Vea AsEnumerable para obtener un ejemplo.

Los vínculos siguientes llevan a artículos que ofrecen información adicional sobre los distintos operadores de consulta estándar según la funcionalidad.

Ordenación de datos [C#]

Operaciones set [C#]

Filtrado de datos [C#]

Operaciones cuantificadoras [C#]

Operaciones de proyección [C#]

Realizar particiones de datos [C#]

Operaciones de combinación [C#]

Agrupar datos [C#]

Operaciones de generación [C#]

Operaciones de igualdad [C#]

Operaciones de elementos [C#]

Convertir tipos de datos [C#]

Operaciones de concatenación [C#]

Operaciones de agregación [C#]

Vea también