Деревья выраженийExpression Trees

Если вы использовали LINQ, то у вас есть опыт работы с полнофункциональной библиотекой, в которой типы Func являются частью набора API.If you have used LINQ, you have experience with a rich library where the Func types are part of the API set. (Если вы не работали с LINQ, перед чтением этого раздела рекомендуем ознакомиться с руководствами по LINQ и лямбда-выражениям.) Деревья выражений обеспечивают более широкие возможности взаимодействия с аргументами, являющимися функциями.(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.

Аргументы функции применяются (как правило, с помощью лямбда-выражений) при создании запросов LINQ.You write function arguments, typically using Lambda Expressions, when you create LINQ queries. В типичном запросе LINQ аргументы функции преобразуются в делегат, создаваемый компилятором.In a typical LINQ query, those function arguments are transformed into a delegate the compiler creates.

Если требуются более широкие возможности взаимодействия, необходимо использовать деревья выражений.When you want to have a richer interaction, you need to use Expression Trees. Деревья выражений представляют код в виде структуры, которую можно анализировать, изменять или выполнять.Expression Trees represent code as a structure that you can examine, modify, or execute. Это дает возможность управлять кодом во время выполнения.These tools give you the power to manipulate code during run time. Вы можете написать код, который анализирует выполняющиеся алгоритмы или добавляет новые возможности.You can write code that examines running algorithms, or injects new capabilities. В более сложных сценариях вы можете изменять выполняющиеся алгоритмы и даже преобразовывать выражения C# в иную форму для выполнения в другой среде.In more advanced scenarios, you can modify running algorithms, and even translate C# expressions into another form for execution in another environment.

Вероятно, вы уже писали код, в котором используются деревья выражений.You've likely already written code that uses Expression Trees. Интерфейсы API LINQ платформы Entity Framework принимают деревья выражений в качестве аргументов для модели выражений запросов LINQ.Entity Framework's LINQ APIs accept Expression Trees as the arguments for the LINQ Query Expression Pattern. Это позволяет платформе Entity Framework преобразовывать запросы, написанные на C#, в код SQL, который выполняется в ядре СУБД.That enables Entity Framework to translate the query you wrote in C# into SQL that executes in the database engine. Другим примером является Moq — популярная платформа прототипирования для .NET.Another example is Moq, which is a popular mocking framework for .NET.

В дальнейших разделах этого учебника описывается, что представляют собой деревья выражений, рассматриваются поддерживающие их классы платформы и демонстрируются способы работы с деревьями выражений.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. Вы узнаете, как считывать деревья выражений, как создавать их, а также как создавать модифицированные деревья выражений и выполнять код, представленный деревьями выражений.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. После ознакомления с учебником вы будете готовы к использованию этих структур для создания эффективных адаптивных алгоритмов.After reading, you will be ready to use these structures to create rich adaptive algorithms.

  1. Описание деревьев выраженийExpression Trees Explained

    Описание структуры и принципов использования деревьев выражений.Understand the structure and concepts behind Expression Trees.

  2. Типы платформ, поддерживающие деревья выраженийFramework Types Supporting Expression Trees

    Сведения о структурах и классах, которые служат для определения деревьев выражений и управления ими.Learn about the structures and classes that define and manipulate expression trees.

  3. Выполнение выраженийExecuting Expressions

    Сведения о том, как преобразовать дерево выражения, представленное как лямбда-выражение, в делегат и как выполнить полученный делегат.Learn how to convert an expression tree represented as a Lambda Expression into a delegate and execute the resulting delegate.

  4. Интерпретация выраженийInterpreting Expressions

    Сведения об обходе и анализе деревьев выражений для получения представления о том, какой код они представляют.Learn how to traverse and examine expression trees to understand what code the expression tree represents.

  5. Построение выраженийBuilding Expressions

    Сведения о построении узлов для дерева выражения и сборке деревьев выражений.Learn how to construct the nodes for an expression tree and build expression trees.

  6. Преобразование выраженийTranslating Expressions

    Сведения о создании измененной копии дерева выражения или преобразовании дерева выражения в другой формат.Learn how to build a modified copy of an expression tree, or translate an expression tree into a different format.

  7. ЗаключениеSumming up

    Сводные сведения о деревьях выражений.Review the information on expression trees.