Información general sobre operadores de consulta estándar (C#)Standard Query Operators Overview (C#)

Los operadores de consulta estándar son los métodos que constituyen el modelo LINQ.The standard query operators are the methods that form the LINQ pattern. 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>.Most of these methods operate on sequences, where a sequence is an object whose type implements the IEnumerable<T> interface or the IQueryable<T> interface. Los operadores de consulta estándar ofrecen funcionalidades de consulta, como las funciones de filtrado, proyección, agregación y ordenación, entre otras.The standard query operators provide query capabilities including filtering, projection, aggregation, sorting and more.

Hay dos conjuntos de operadores de consulta estándar de LINQ, uno que actúa sobre objetos de tipo IEnumerable<T> y otro que actúa en objetos de tipo IQueryable<T>.There are two sets of LINQ standard query operators, one that operates on objects of type IEnumerable<T> and the other that operates on objects of type IQueryable<T>. Los métodos que forman cada conjunto son miembros estáticos de las clases Enumerable y Queryable, respectivamente.The methods that make up each set are static members of the Enumerable and Queryable classes, respectively. Se definen como métodos de extensión del tipo en el que actúan.They are defined as extension methods of the type that they operate on. Esto significa que se pueden llamar mediante sintaxis de método estático o sintaxis de método de instancia.This means that they can be called by using either static method syntax or instance method syntax.

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>.In addition, several standard query operator methods operate on types other than those based on IEnumerable<T> or IQueryable<T>. El tipo Enumerable define dos métodos que funcionan en objetos de tipo IEnumerable.The Enumerable type defines two such methods that both operate on objects of type 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.These methods, Cast<TResult>(IEnumerable) and OfType<TResult>(IEnumerable), let you enable a non-parameterized, or non-generic, collection to be queried in the LINQ pattern. Para ello, se crea una colección de objetos fuertemente tipados.They do this by creating a strongly-typed collection of objects. La clase Queryable define dos métodos similares, Cast<TResult>(IQueryable) y OfType<TResult>(IQueryable), que funcionan en objetos de tipo Queryable.The Queryable class defines two similar methods, Cast<TResult>(IQueryable) and OfType<TResult>(IQueryable), that operate on objects of type Queryable.

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.The standard query operators differ in the timing of their execution, depending on whether they return a singleton value or a sequence of values. Esos métodos que devuelven un valor singleton (por ejemplo, Average y Sum) se ejecutan inmediatamente.Those methods that return a singleton value (for example, Average and Sum) execute immediately. Los métodos que devuelven una secuencia aplazan la ejecución de la consulta y devuelven un objeto enumerable.Methods that return a sequence defer the query execution and return an enumerable object.

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.In the case of the methods that operate on in-memory collections, that is, those methods that extend IEnumerable<T>, the returned enumerable object captures the arguments that were passed to the method. Cuando se enumera ese objeto, se emplea la lógica del operador de consulta y se devuelven los resultados de la consulta.When that object is enumerated, the logic of the query operator is employed and the query results are returned.

En cambio, los métodos que extienden IQueryable<T> no implementan ningún comportamiento de consulta, pero crean un árbol de la expresión que representa la consulta que se va a realizar.In contrast, methods that extend IQueryable<T> do not implement any querying behavior, but build an expression tree that represents the query to be performed. El procesamiento de consultas se controla mediante el objeto IQueryable<T> de origen.The query processing is handled by the source IQueryable<T> object.

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.Calls to query methods can be chained together in one query, which enables queries to become arbitrarily complex.

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.The following code example demonstrates how the standard query operators can be used to obtain information about a sequence.

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 consultaQuery Expression Syntax

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.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 obtener más información sobre los operadores de consulta estándar que incluyen palabras clave dedicadas y sus sintaxis correspondientes, vea Query Expression Syntax for Standard Query Operators (C#) (Sintaxis de las expresiones de consulta para operadores de consulta estándar [C#]).For more information about standard query operators that have dedicated keywords and their corresponding syntaxes, see Query Expression Syntax for Standard Query Operators (C#).

Extender los operadores de consulta estándarExtending the Standard Query Operators

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.You can augment the set of standard query operators by creating domain-specific methods that are appropriate for your target domain or technology. 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.You can also replace the standard query operators with your own implementations that provide additional services such as remote evaluation, query translation, and optimization. Vea AsEnumerable para obtener un ejemplo.See AsEnumerable for an example.

Los vínculos siguientes le llevan a temas que ofrecen información adicional sobre los distintos operadores de consulta estándar según la funcionalidad.The following links take you to topics that provide additional information about the various standard query operators based on functionality.

Sorting Data (C#) (Ordenación de datos [C#])Sorting Data (C#)

Set Operations (C#) (Operaciones set [C#])Set Operations (C#)

Filtering Data (C#) (Filtrado de datos [C#])Filtering Data (C#)

Quantifier Operations (C#) (Operaciones cuantificadoras [C#])Quantifier Operations (C#)

Projection Operations (C#) (Operaciones de proyección [C#])Projection Operations (C#)

Partitioning Data (Realizar particiones de datos [C#])Partitioning Data (C#)

Join Operations (C#) (Operaciones de combinación [C#])Join Operations (C#)

Grouping Data (C#) (Agrupar datos [C#])Grouping Data (C#)

Generation Operations (C#) (Operaciones de generación [C#])Generation Operations (C#)

Equality Operations (C#) (Operaciones de igualdad [C#])Equality Operations (C#)

Element Operations (C#) (Operaciones de elementos [C#])Element Operations (C#)

Converting Data Types (C#) (Convertir tipos de datos [C#])Converting Data Types (C#)

Concatenation Operations (C#) (Operaciones de concatenación [C#])Concatenation Operations (C#)

Aggregation Operations (C#) (Operaciones de agregación [C#])Aggregation Operations (C#)

Vea tambiénSee also