Expresiones de consultas LINQ (Guía de programación de C#)

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 la sintaxis de consulta declarativa que se introdujo en C# 3.0. Al usar sintaxis de consulta, se pueden realizar incluso operaciones complejas de filtrado, ordenación y agrupamiento en orígenes de datos con código mínimo. Los mismos patrones de expresión de consulta básicos se usan para consultar y transformar datos de bases de datos 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 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 están fuertemente tipadas, 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 (C#).

  • 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, vea Introducción a las consultas LINQ (C#).

  • 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``1 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 en LINQ (C#).

  • 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 se compilan en delegados. Las consultas IQueryable y IQueryable se compilan en árboles de expresión. Para obtener más información, consulte Árboles de expresión (C# y Visual Basic).

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#.

Cómo: Escribir consultas con LINQ en 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 los resultados de consultas (Guía de programación de C#)

Muestra maneras diferentes de utilizar la cláusula group.

Cómo: Crear grupos anidados (Guía de programación de C#)

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.

Cómo: Especificar dinámicamente filtros con predicado en tiempo de ejecución (Guía de programación de C#)

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

Guía de programación de C#

Operaciones básicas de consulta LINQ (C#)

Sintaxis de consultas y sintaxis de métodos en LINQ (C#)

Información general sobre operadores de consulta estándar

Otros recursos

LINQ (Language-Integrated Query)

Palabras clave de consultas (Referencia de C#)

How Linq to Objects Queries Work

Reading and Writing Queries

What is a collection?

Link to Everything: A List of LINQ Providers