Arborescences de l’expressionExpression Trees

Si vous avez déjà utilisé LINQ, vous connaissez une bibliothèque enrichie où les types Func font partie de l’ensemble d’API.If you have used LINQ, you have experience with a rich library where the Func types are part of the API set. (Si vous ne connaissez pas LINQ, nous vous conseillons de lire le tutoriel LINQ et l’article sur les expressions lambda avant celui-ci.) Les arborescences d’expressions fournissent une interaction plus complète avec les arguments qui sont des fonctions.(If you are not familiar with LINQ, you probably want to read the LINQ tutorial and the article about lambda expressions before this one.) Expression Trees provide richer interaction with the arguments that are functions.

Vous écrivez des arguments de fonction, généralement à l’aide d’expressions lambda, quand vous créez des requêtes LINQ.You write function arguments, typically using Lambda Expressions, when you create LINQ queries. Dans une requête LINQ classique, ces arguments de fonction sont transformés en un délégué créé par le compilateur.In a typical LINQ query, those function arguments are transformed into a delegate the compiler creates.

Quand vous souhaitez avoir une interaction plus complète, vous devez utiliser des arborescences d’expressions.When you want to have a richer interaction, you need to use Expression Trees. Les arborescences d’expressions représentent le code sous forme de structure que vous pouvez examiner, modifier ou exécuter.Expression Trees represent code as a structure that you can examine, modify, or execute. Ces outils vous permettent de manipuler le code au moment de l’exécution.These tools give you the power to manipulate code during run time. Vous pouvez écrire du code qui examine les algorithmes en cours d’exécution ou injecte de nouvelles fonctionnalités.You can write code that examines running algorithms, or injects new capabilities. Dans des scénarios avancés, vous pouvez modifier les algorithmes en cours d’exécution, et même traduire les expressions C# dans une autre forme en vue d’une exécution dans un autre environnement.In more advanced scenarios, you can modify running algorithms, and even translate C# expressions into another form for execution in another environment.

Vous avez probablement déjà écrit du code qui utilise des arborescences d’expressions.You've likely already written code that uses Expression Trees. Les API LINQ d’Entity Framework acceptent des arborescences d’expressions comme arguments pour le modèle d’expression de requête LINQ.Entity Framework's LINQ APIs accept Expression Trees as the arguments for the LINQ Query Expression Pattern. Cela permet à Entity Framework de traduire la requête que vous avez écrite en C# en code SQL qui s’exécute dans le moteur de base de données.That enables Entity Framework to translate the query you wrote in C# into SQL that executes in the database engine. Moq, framework de simulation populaire pour .NET, constitue un autre exemple.Another example is Moq, which is a popular mocking framework for .NET.

Les sections suivantes de ce didacticiel expliquent en détail ce que sont les arborescences d’expressions, examinent les classes de framework qui prennent en charge les arborescences d’expressions et montrent comment utiliser des arborescences d’expressions.The remaining sections of this tutorial will explore what Expression Trees are, examine the framework classes that support expression trees, and show you how to work with expression trees. Vous découvrirez comment lire des arborescences d’expressions, créer des arborescences d’expressions, créer des arborescences d’expressions modifiées et exécuter le code représenté par des arborescences d’expressions.You'll learn how to read expression trees, how to create expression trees, how to create modified expression trees, and how to execute the code represented by expression trees. Une fois ce didacticiel terminé, vous serez prêt à utiliser ces structures pour créer des algorithmes adaptatifs enrichis.After reading, you will be ready to use these structures to create rich adaptive algorithms.

  1. Explication des arborescences de l’expressionExpression Trees Explained

    Comprenez la structure et les concepts derrière les arborescences d’expressions.Understand the structure and concepts behind Expression Trees.

  2. Types de frameworks prenant en charge les arborescences de l’expressionFramework Types Supporting Expression Trees

    Découvrez les structures et les classes qui définissent et manipulent des arborescences d’expressions.Learn about the structures and classes that define and manipulate expression trees.

  3. Exécution d’expressionsExecuting Expressions

    Découvrez comment convertir une arborescence d’expressions représentée sous forme d’expression lambda en un délégué, et comment exécuter le délégué résultant.Learn how to convert an expression tree represented as a Lambda Expression into a delegate and execute the resulting delegate.

  4. Interprétation d’expressionsInterpreting Expressions

    Découvrez comment parcourir et examiner des arborescences d’expressions pour comprendre quel est le code représenté par l’arborescence d’expressions.Learn how to traverse and examine expression trees to understand what code the expression tree represents.

  5. Création d’expressionsBuilding Expressions

    Découvrez comment construire les nœuds d’une arborescence d’expressions et comment générer des arborescences d’expressions.Learn how to construct the nodes for an expression tree and build expression trees.

  6. Traduction d’expressionsTranslating Expressions

    Découvrez comment générer une copie modifiée d’une arborescence d’expressions ou comment traduire une arborescence d’expressions dans un format différent.Learn how to build a modified copy of an expression tree, or translate an expression tree into a different format.

  7. ConclusionSumming up

    Passez en revue les informations sur les arborescences d’expressions.Review the information on expression trees.