Language-Integrated Query (LINQ)Language Integrated Query (LINQ)

Language-Integrated Query (LINQ) es el nombre de un conjunto de tecnologías basadas en la integración de capacidades de consulta directamente en el lenguaje C#.Language-Integrated Query (LINQ) is the name for a set of technologies based on the integration of query capabilities directly into the C# language. Tradicionalmente, las consultas con datos se expresaban como cadenas simples sin comprobación de tipos en tiempo de compilación ni compatibilidad con IntelliSense.Traditionally, queries against data are expressed as simple strings without type checking at compile time or IntelliSense support. Además, tiene que aprender un lenguaje de consultas diferente para cada tipo de origen de datos: bases de datos SQL, documentos XML y varios servicios web, entre otros.Furthermore, you have to learn a different query language for each type of data source: SQL databases, XML documents, various Web services, and so on. Con LINQ, una consulta es una construcción de lenguaje de primera clase, como clases, métodos y eventos.With LINQ, a query is a first-class language construct, just like classes, methods, events.

Para un desarrollador que escribe consultas, la parte más visible de "lenguaje integrado" de LINQ es la expresión de consulta.For a developer who writes queries, the most visible "language-integrated" part of LINQ is the query expression. Las expresiones de consulta se escriben con una sintaxis de consulta declarativa.Query expressions are written in a declarative query syntax. Con la sintaxis de consulta, puede realizar operaciones de filtrado, ordenación y agrupamiento en orígenes de datos con el mínimo código.By using query syntax, you can perform filtering, ordering, and grouping operations on data sources with a minimum of code. Utilice los mismos patrones de expresión de consulta básica para consultar y transformar datos de bases de datos SQL, conjuntos de datos de ADO .NET, secuencias y documentos XML y colecciones. NET.You use the same basic query expression patterns to query and transform data in SQL databases, ADO .NET Datasets, XML documents and streams, and .NET collections.

En el ejemplo siguiente se muestra la operación de consulta completa.The following example shows the complete query operation. La operación completa incluye crear un origen de datos, definir la expresión de consulta y ejecutar la consulta en una instrucción foreach.The complete operation includes creating a data source, defining the query expression, and executing the query in a foreach statement.

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

Información general sobre la expresión de consultaQuery expression overview

  • Las expresiones de consulta se pueden utilizar para consultar y transformar los datos de cualquier origen de datos habilitado para LINQ.Query expressions can be used to query and to transform data from any LINQ-enabled data source. Por ejemplo, una sola consulta puede recuperar datos de una base de datos SQL y generar una secuencia XML como salida.For example, a single query can retrieve data from a SQL database, and produce an XML stream as output.

  • Las expresiones de consulta son fáciles de controlar porque utilizan muchas construcciones de lenguaje C# familiares.Query expressions are easy to master because they use many familiar C# language constructs.

  • 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.The variables in a query expression are all strongly typed, although in many cases you do not have to provide the type explicitly because the compiler can infer it. Para más información, vea Type Relationships in LINQ Query Operations (Relaciones entre tipos en las operaciones de consulta LINQ).For more information, see Type relationships in LINQ query operations.

  • Una consulta no se ejecuta hasta que no se realiza la iteración a través de la variable de consulta, por ejemplo, en una instrucción foreach.A query is not executed until you iterate over the query variable, for example, in a foreach statement. Para más información, vea Introduction to LINQ queries (Introducción a las consultas LINQ).For more information, see Introduction to LINQ queries.

  • En tiempo de compilación, las expresiones de consulta se convierten en llamadas al método de operador de consulta estándar según las reglas establecidas en la especificación de C#.At compile time, query expressions are converted to Standard Query Operator method calls according to the rules set forth in the C# specification. Cualquier consulta que se puede expresar con sintaxis de consulta también se puede expresar mediante sintaxis de método.Any query that can be expressed by using query syntax can also be expressed by using method syntax. Sin embargo, en la mayoría de los casos, la sintaxis de consulta es más legible y concisa.However, in most cases query syntax is more readable and concise. Para más información, vea Especificación del lenguaje C# e Información general sobre operadores de consulta estándar.For more information, see C# language specification and Standard query operators overview.

  • Como regla al escribir consultas LINQ, se recomienda utilizar la sintaxis de consulta siempre que sea posible y la sintaxis de método cuando sea necesario.As a rule when you write LINQ queries, we recommend that you use query syntax whenever possible and method syntax whenever necessary. No hay diferencias semánticas ni de rendimiento entre estas dos formas diversas.There is no semantic or performance difference between the two different forms. Las expresiones de consulta suelen ser más legibles que las expresiones equivalentes escritas con la sintaxis de método.Query expressions are often more readable than equivalent expressions written in method syntax.

  • Algunas operaciones de consulta, como Count o Max, no tienen ninguna cláusula de expresión de consulta equivalente, de modo que deben expresarse como una llamada de método.Some query operations, such as Count or Max, have no equivalent query expression clause and must therefore be expressed as a method call. La sintaxis de método se puede combinar con la sintaxis de consulta de varias maneras.Method syntax can be combined with query syntax in various ways. Para más información, vea Query syntax and method syntax in LINQ (Sintaxis de consulta y sintaxis de método en LINQ).For more information, see Query syntax and method syntax in LINQ.

  • Las expresiones de consulta pueden compilarse en árboles de expresión o en delegados, en función del tipo al que se aplica la consulta.Query expressions can be compiled to expression trees or to delegates, depending on the type that the query is applied to. Las consultas IEnumerable<T> se compilan en delegados.IEnumerable<T> queries are compiled to delegates. Las consultas IQueryable y IQueryable<T> se compilan en árboles de expresión.IQueryable and IQueryable<T> queries are compiled to expression trees. Para más información, vea Expression trees (Árboles de expresión).For more information, see Expression trees.

Pasos siguientesNext steps

Para obtener más información sobre LINQ, empiece a familiarizarse con algunos conceptos básicos en Conceptos básicos de las expresiones de consultas y, después, lea la documentación de la tecnología de LINQ en la que esté interesado:To learn more details about LINQ, start by becoming familiar with some basic concepts in Query expression basics, and then read the documentation for the LINQ technology in which you are interested:

Para comprender mejor los aspectos generales de LINQ, vea LINQ in C# (LINQ en C#).To gain a deeper understanding of LINQ in general, see LINQ in C#.

Para empezar a trabajar con LINQ en C#, vea el tutorial Working with LINQ (Trabajar con LINQ).To start working with LINQ in C#, see the tutorial Working with LINQ.