Árvores de expressãoExpression Trees

Se tiver usado o LINQ, você tem experiência com uma rica biblioteca em que os tipos Func fazem parte do conjunto de API.If you have used LINQ, you have experience with a rich library where the Func types are part of the API set. (Se você não estiver familiarizado com o LINQ, provavelmente deseja ler o tutorial do LINQ e o artigo sobre expressões lambda antes desta.) As árvores de expressão fornecem uma interação mais rica com os argumentos que são funções.(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.

Você escreve argumentos de função, normalmente usando expressões lambda, quando cria consultas LINQ.You write function arguments, typically using Lambda Expressions, when you create LINQ queries. Em uma consulta LINQ típica, esses argumentos de função são transformados em um delegado que o compilador cria.In a typical LINQ query, those function arguments are transformed into a delegate the compiler creates.

Quando quiser ter uma interação mais avançada, você precisa usar Árvores de expressão.When you want to have a richer interaction, you need to use Expression Trees. Árvores de expressão representam o código como uma estrutura que você pode examinar, modificar ou executar.Expression Trees represent code as a structure that you can examine, modify, or execute. Essas ferramentas oferecem a capacidade de manipular o código em tempo de execução.These tools give you the power to manipulate code during run time. Você pode escrever código que examina algoritmos em execução ou injeta novos recursos.You can write code that examines running algorithms, or injects new capabilities. Em cenários mais avançados, você pode modificar algoritmos em execução e até mesmo converter expressões C# para outro formato para execução em outro ambiente.In more advanced scenarios, you can modify running algorithms, and even translate C# expressions into another form for execution in another environment.

Provavelmente, você já escreveu código usando Árvores de expressão.You've likely already written code that uses Expression Trees. APIs do LINQ do Entity Framework aceitam Árvores de expressão como os argumentos para o padrão de expressão de consulta do LINQ.Entity Framework's LINQ APIs accept Expression Trees as the arguments for the LINQ Query Expression Pattern. Isso permite que o Entity Framework converta a consulta que você escreveu em C# em SQL, que é executado no mecanismo do banco de dados.That enables Entity Framework to translate the query you wrote in C# into SQL that executes in the database engine. Outro exemplo é Moq, que é uma estrutura de simulação popular para .NET.Another example is Moq, which is a popular mocking framework for .NET.

As seções restantes deste tutorial explorarão o que são as árvores de expressão, examinarão as classes de estrutura que dão suporte a árvores de expressão e mostrarão como trabalhar com árvores de expressão.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. Você aprenderá a ler árvores de expressão, criar árvores de expressão, criar árvores de expressão modificadas e executar o código representado pelas árvores de expressão.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. Após a leitura, você estará pronto para usar essas estruturas para criar algoritmos adaptáveis avançados.After reading, you will be ready to use these structures to create rich adaptive algorithms.

  1. Árvores de Expressão ExplicadasExpression Trees Explained

    Compreender a estrutura e os conceitos por trás das Árvores de Expressão.Understand the structure and concepts behind Expression Trees.

  2. Tipos de Framework com Suporte a Árvores de ExpressãoFramework Types Supporting Expression Trees

    Saiba mais sobre as estruturas e classes que definem e manipulam as árvores de expressão.Learn about the structures and classes that define and manipulate expression trees.

  3. Executando ExpressõesExecuting Expressions

    Saiba como converter uma árvore de expressão representada como uma expressão lambda em um delegado e como executar o delegado resultante.Learn how to convert an expression tree represented as a Lambda Expression into a delegate and execute the resulting delegate.

  4. Interpretando ExpressõesInterpreting Expressions

    Saiba como percorrer e examinar árvores de expressão para entender que código a árvore de expressão representa.Learn how to traverse and examine expression trees to understand what code the expression tree represents.

  5. Compilando ExpressõesBuilding Expressions

    Saiba como construir os nós de uma árvore de expressão e compilar árvores de expressão.Learn how to construct the nodes for an expression tree and build expression trees.

  6. Traduzindo ExpressõesTranslating Expressions

    Saiba como compilar uma cópia modificada de uma árvore de expressão ou converter uma árvore de expressão em um formato diferente.Learn how to build a modified copy of an expression tree, or translate an expression tree into a different format.

  7. ResumindoSumming up

    Examine informações sobre as árvores de expressão.Review the information on expression trees.