LINQ (Language-Integrated Query)

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#. 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 IntelliSense. En outre, vous devez 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. Avec LINQ, une requête est une construction de langage de premier ordre, comme les classes, les méthodes et les événements.

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. Les expressions de requête sont écrites selon une syntaxe de requête déclarative. 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. 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.

L’exemple suivant montre l’opération de requête complète. 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.

// Specify the data source.
int[] scores = { 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ête

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

  • Les expressions de requête sont faciles à saisir car elles utilisent de nombreuses constructions familières du langage C#.

  • 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. Pour plus d’informations, consultez la page Relations entre les types dans les opérations de requête LINQ.

  • 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. Pour plus d’informations, consultez Introduction aux requêtes LINQ.

  • 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#. Toute requête exprimable avec la syntaxe de requête peut également être exprimée avec la syntaxe de méthode. Toutefois, dans la plupart des cas, la syntaxe de requête est plus lisible et plus concise. Pour plus d’informations, consultez les pages Spécification du langage C# et Vue d’ensemble des opérateurs de requête standard.

  • 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. Il n’y a aucune différence de sémantique ou de performances entre les deux formats. Les expressions de requête sont souvent plus lisibles que les expressions équivalentes écrites avec la syntaxe de méthode.

  • 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. La syntaxe de méthode peut être combinée avec la syntaxe de requête de différentes manières. Pour plus d’informations, consultez la page Syntaxe de requête et syntaxe de méthode dans 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. Les requêtes IEnumerable<T> sont compilées en délégués. Les requêtes IQueryable et IQueryable<T> sont compilées en arborescences d’expression. Pour plus d’informations, consultez la page Arborescences d’expressions.

Étapes suivantes

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 :

Pour approfondir votre compréhension de LINQ en général, consultez la page LINQ en C#.

Pour commencer à travailler avec LINQ en C#, consultez le didacticiel Travailler avec LINQ.