Expresiones de consultas con LINQ (Guía de programación de C#)
Actualización: noviembre 2007
Language-Integrated Query (LINQ) es el nombre de un conjunto de tecnologías que consiste en la integración directa de funciones de consulta en el lenguaje C# (también en Visual Basic y potencialmente en cualquier otro lenguaje de .NET). Con LINQ, ahora una consulta es una construcción de lenguaje de primera clase, igual que las clases, los métodos, los eventos, etc.
Para un programador que escribe consultas, la parte integrada en el lenguaje más visible de LINQ es la expresión de consulta. Las expresiones de consulta se escriben en una sintaxis de consulta declarativa que se dio a conocer en C# 3.0. Al usar la sintaxis de consulta, se pueden realizar operaciones complejas de filtrado, clasificación y agrupación en orígenes de datos con una cantidad mínima de código. Los mismos patrones de expresión de consulta básicos se usan para consultar y transformar datos de bases de datos de SQL, conjuntos de datos de ADO.NET, secuencias y documentos XML, y colecciones de .NET.
En el siguiente ejemplo se muestra la operación de consulta completa. La operación completa incluye la creación de un origen de datos, la definición de la expresión de consulta y la ejecución de la consulta en una instrucción foreach.
class LINQQueryExpressions
{
static void Main()
{
// Specify the data source.
int[] scores = new int[] { 97, 92, 81, 60 };
// Define the query expression.
IEnumerable<int> scoreQuery =
from score in scores
where score > 80
select score;
// Execute the query.
foreach (int i in scoreQuery)
{
Console.Write(i + " ");
}
}
}
// Output: 97 92 81
Para obtener más información acerca de los fundamentos de LINQ en C#, vea Introducción a LINQ en C#.
Información general sobre las expresiones de consulta
Las expresiones de consulta se pueden utilizar para consultar y transformar los datos de cualquier origen de datos compatible con LINQ. Por ejemplo, una misma consulta puede recuperar datos de una base de datos de SQL y generar una secuencia XML como resultado.
Las expresiones de consulta son fáciles de controlar porque utilizan muchas construcciones de lenguaje de C# familiares. Para obtener más información, consulte Introducción a LINQ en C#.
Todas las variables de una expresión de consulta tienen establecimiento inflexible de tipos, aunque en muchos casos no es necesario proporcionar el tipo explícitamente porque el compilador puede deducirlo. Para obtener más información, consulte Relaciones entre tipos en operaciones de consulta (LINQ).
Una consulta no se ejecuta hasta que se recorre en iteración la variable de consulta en una instrucción foreach. Para obtener más información, consulte Introducción a consultas con LINQ.
En tiempo de compilación, las expresiones de consulta se convierten en llamadas a métodos de operador de consulta estándar de acuerdo con las reglas establecidas en la especificación de C#. Cualquier consulta que se puede expresar con sintaxis de consulta también se puede expresar con sintaxis de método. Sin embargo, en la mayoría de los casos, la sintaxis de consulta es más legible y concisa. Para obtener más información, consulte Especificación del lenguaje C# y Información general sobre operadores de consulta estándar.
Como norma, cuando escriba consultas LINQ, recomendamos que siempre que sea posible utilice la sintaxis de consulta y que utilice la sintaxis de método sólo cuando sea necesario. No existe ninguna diferencia semántica o de rendimiento entre las dos formas. Las expresiones de consulta suelen ser más legibles que las expresiones equivalentes escritas con sintaxis de método.
Algunas operaciones de consulta, como Count o Max, no tienen ninguna cláusula de expresión de consulta equivalente y, por tanto, deben expresarse como una llamada a método. La sintaxis de método se puede combinar con la sintaxis de consulta de varias maneras. Para obtener más información, consulte Sintaxis de consultas y Sintaxis de métodos (LINQ).
Las expresiones de consulta pueden compilarse en árboles de expresión o en delegados, dependiendo del tipo al que se aplique la consulta. Las consultas IEnumerable<T> se compilan en delegados. Las consultas IQueryable y IQueryable<T> se compilan en árboles de expresión. Para obtener más información, consulte Árboles de expresiones.
En la tabla siguiente se enumeran los temas en los que se proporciona información adicional sobre las consultas y ejemplos de código para realizar tareas comunes.
Tema |
Descripción |
---|---|
Conceptos básicos de las expresiones de consultas (Guía de programación de C#) |
Presenta conceptos fundamentales de las consultas y proporciona ejemplos de sintaxis de consulta de C#. |
Proporciona ejemplos de varios tipos básicos de expresiones de consulta. |
|
Cómo: Controlar excepciones con expresiones de consultas (Guía de programación de C#) |
Explica cómo y cuándo se debe mover el código que pueda provocar excepciones fuera de una expresión de consulta. |
Cómo: Rellenar colecciones de objetos de varios orígenes (LINQ) |
Explica cómo utilizar la instrucción select para combinar datos de orígenes diferentes en un nuevo tipo. |
Cómo: Agrupar resultados de distintas maneras (Guía de programación de C#) |
Muestra maneras diferentes de utilizar la cláusula group. |
Muestra cómo crear grupos anidados. |
|
Cómo: Realizar una subconsulta en una operación de agrupación (Guía de programación de C#) |
Muestra cómo utilizar una subexpresión de una consulta como un origen de datos para una nueva consulta. |
Cómo: Agrupar resultados por claves contiguas (Guía de programación de C#) |
Muestra cómo implementar un operador de consulta estándar seguro para subprocesos que pueda realizar operaciones de agrupación en orígenes de datos de transmisión por secuencias. |
Muestra cómo proporcionar un número arbitrario de valores para utilizarlo en comparaciones de igualdad en una cláusula where. |
|
Cómo: Almacenar los resultados de una consulta en la memoria (Guía de programación de C#) |
Muestra cómo materializar y almacenar los resultados de consulta sin usar necesariamente un bucle foreach. |
Cómo: Devolver una consulta desde un método (Guía de programación de C#) |
Muestra cómo devolver variables de consulta desde métodos y cómo pasarlas a métodos como parámetros de entrada. |
Cómo: Realizar operaciones de combinación personalizadas (Guía de programación de C#) |
Muestra cómo realizar operaciones de combinación basadas en cualquier tipo de función de predicado. |
Cómo: Realizar una unión usando claves compuestas (Guía de programación de C#) |
Muestra cómo combinar dos orígenes basándose en más de una clave coincidente. |
Cómo: Ordenar los resultados de una cláusula join (Guía de programación de C#) |
Muestra cómo ordenar una secuencia generada en una operación de combinación. |
Cómo: Realizar combinaciones internas (Guía de programación de C#) |
Muestra cómo realizar una combinación interna en LINQ. |
Cómo: Realizar combinaciones agrupadas (Guía de programación de C#) |
Muestra cómo generar una combinación agrupada en LINQ. |
Cómo: Realizar operaciones de combinación externa izquierda (Guía de programación de C#) |
Muestra cómo generar una combinación externa izquierda en LINQ. |
Cómo: Controlar valores Null en expresiones de consultas (Guía de programación de C#) |
Muestra cómo administrar los valores nulos en consultas de LINQ. |
Vea también
Tareas
Tutorial: Escribir consultas en C# (LINQ)
Conceptos
Operaciones básicas de consulta (LINQ)
Sintaxis de consultas y Sintaxis de métodos (LINQ)
Información general sobre operadores de consulta estándar
Referencia
Guía de programación general con LINQ
Otros recursos
Language-Integrated Query (LINQ)
Palabras clave de consultas (Referencia de C#)