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

LINQ (Language-Integrated Query) est le nom d’un ensemble de technologies basé sur l’intégration de fonctions de requête directement dans le langage 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. En règle générale, les requêtes de données sont exprimées comme de simples chaînes, sans vérification de type au moment de l’exécution, ni prise en charge d’IntelliSense.Traditionally, queries against data are expressed as simple strings without type checking at compile time or IntelliSense support. En outre, il vous faut apprendre un langage de requête différent pour chaque type de source de données : bases de données SQL, documents XML, services web, etc.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. Avec LINQ, une requête est une construction de langage de premier ordre, comme les classes, les méthodes et les événements.With LINQ, a query is a first-class language construct, just like classes, methods, events.

Pour un développeur qui écrit des requêtes, la partie « intégrée au langage » la plus visible de LINQ est l’expression de requête.For a developer who writes queries, the most visible "language-integrated" part of LINQ is the query expression. Les expressions de requête sont écrites selon une syntaxe de requête déclarative.Query expressions are written in a declarative query syntax. En utilisant la syntaxe de requête, vous pouvez effectuer des opérations de filtrage, de classement et de regroupement sur des sources de données avec un minimum de code.By using query syntax, you can perform filtering, ordering, and grouping operations on data sources with a minimum of code. Vous utilisez les mêmes modèles d’expression de requête de base pour interroger et transformer des données dans les bases de données SQL, les jeux de données ADO .NET, les flux et documents XML et les collections .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.

L’exemple suivant montre l’opération de requête complète.The following example shows the complete query operation. L’opération complète comprend la création d’une source de données, la définition de l’expression de requête et l’exécution de la requête dans une instruction 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

Vue d’ensemble des expressions de requêteQuery expression overview

  • Les expressions de requête peuvent être utilisées pour interroger et transformer des données à partir de n’importe quelle source de données compatible LINQ.Query expressions can be used to query and to transform data from any LINQ-enabled data source. Par exemple, une même requête peut récupérer des données d’une base de données SQL et générer un flux XML en sortie.For example, a single query can retrieve data from a SQL database, and produce an XML stream as output.

  • Les expressions de requête sont faciles à maîtriser, car elles utilisent de nombreuses constructions familières du langage C#.Query expressions are easy to master because they use many familiar C# language constructs.

  • Les variables d’une expression de requête sont toutes fortement typées, même si, dans de nombreux cas, il n’est pas nécessaire de fournir le type explicitement, car le compilateur peut le déduire.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. Pour plus d’informations, consultez la page Relations entre les types dans les opérations de requête LINQ.For more information, see Type relationships in LINQ query operations.

  • Une requête ne s’exécute pas tant que vous n’avez pas itéré la variable de requête, par exemple dans une instruction foreach.A query is not executed until you iterate over the query variable, for example, in a foreach statement. Pour plus d’informations, consultez la page Introduction aux requêtes LINQ.For more information, see Introduction to LINQ queries.

  • Lors de la compilation, les expressions de requête sont converties en appels de méthode d’opérateur de requête standard en fonction des règles définies dans la spécification du langage C#.At compile time, query expressions are converted to Standard Query Operator method calls according to the rules set forth in the C# specification. Toute requête exprimable avec la syntaxe de requête peut également être exprimée avec la syntaxe de méthode.Any query that can be expressed by using query syntax can also be expressed by using method syntax. Toutefois, dans la plupart des cas, la syntaxe de requête est plus lisible et plus concise.However, in most cases query syntax is more readable and concise. Pour plus d’informations, consultez les pages Spécification du langage C# et Vue d’ensemble des opérateurs de requête standard.For more information, see C# language specification and Standard query operators overview.

  • En règle générale, lorsque vous écrivez des requêtes LINQ, nous vous recommandons d’utiliser la syntaxe de requête dans la mesure du possible et la syntaxe de méthode si nécessaire.As a rule when you write LINQ queries, we recommend that you use query syntax whenever possible and method syntax whenever necessary. Il n’y a aucune différence de sémantique ou de performances entre les deux formats.There is no semantic or performance difference between the two different forms. Les expressions de requête sont souvent plus lisibles que les expressions équivalentes écrites avec la syntaxe de méthode.Query expressions are often more readable than equivalent expressions written in method syntax.

  • Certaines opérations de requête, comme Count ou Max, n’ont pas d’expression de requête équivalente et doivent par conséquent être exprimées sous la forme d’un appel de méthode.Some query operations, such as Count or Max, have no equivalent query expression clause and must therefore be expressed as a method call. La syntaxe de méthode peut être combinée avec la syntaxe de requête de différentes manières.Method syntax can be combined with query syntax in various ways. Pour plus d’informations, consultez la page Syntaxe de requête et syntaxe de méthode dans LINQ.For more information, see Query syntax and method syntax in LINQ.

  • Les expressions de requête peuvent être compilées dans des arborescences d’expressions ou des délégués, selon le type auquel la requête est appliquée.Query expressions can be compiled to expression trees or to delegates, depending on the type that the query is applied to. Les requêtes IEnumerable<T> sont compilées en délégués.IEnumerable<T> queries are compiled to delegates. Les requêtes IQueryable et IQueryable<T> sont compilées en arborescences d’expression.IQueryable and IQueryable<T> queries are compiled to expression trees. Pour plus d’informations, consultez la page Arborescences d’expressions.For more information, see Expression trees.

Étapes suivantesNext steps

Pour approfondir votre connaissance de LINQ, commencez par vous familiariser avec certains concepts de base expliqués sur la page Principes de base des expressions de requête, puis lisez la documentation relative à la technologie LINQ qui vous intéresse :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:

Pour approfondir votre compréhension de LINQ en général, consultez la page LINQ en C#.To gain a deeper understanding of LINQ in general, see LINQ in C#.

Pour commencer à travailler avec LINQ en C#, consultez le didacticiel Travailler avec LINQ.To start working with LINQ in C#, see the tutorial Working with LINQ.