式ツリーExpression Trees

LINQ を使ったことがあれば、API セットに Func 型が含まれる豊富なライブラリを利用したのではないでしょうか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. Entity Framework の LINQ API では、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. もう 1 つの例として Moq があります。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.