表示式樹基礎

表示式樹表示樹狀資料結構中的程式碼,其中每個節點都是表示式

Expression Trees 支援動態修改可執行程式碼,在各種資料庫中執行 LINQ 查詢以及建立動態查詢。你可以編譯和執行表示式樹所代表的程式碼。

它們還用於動態語言執行時(DLR),以提供動態語言和 .NET Framework 之間的互操作性,並使編譯器編寫器能夠發出表示式樹而不是 Microsoft 中間語言(MSIL)。

表達樹可以通過建立

  1. 匿名 lambda 表達,
  2. 通過使用 System.Linq.Expressions 名稱空間手動。

來自 Lambda 表示式的表示式樹

將 lambda 表示式分配給 Expression 型別變數時,編譯器會發出程式碼以構建表示 lambda 表示式的表示式樹。

以下程式碼示例顯示如何讓 C#編譯器建立表示 lambda 表示式 num => num <5 的表示式樹。

Expression<Func<int, bool>> lambda = num => num < 5;

使用 API​​表達樹

表示式樹也使用表示式類建立。此類包含用於建立特定型別的表示式樹節點的靜態工廠方法。

以下是幾種型別的 Tree 節點。

  1. ParameterExpression
  2. MethodCallExpression

以下程式碼示例演示如何使用 API​​建立表示 lambda 表示式 num => num <5 的表示式樹。

ParameterExpression numParam = Expression.Parameter(typeof(int), "num");
ConstantExpression five = Expression.Constant(5, typeof(int));
BinaryExpression numLessThanFive = Expression.LessThan(numParam, five);
Expression<Func<int, bool>> lambda1 = Expression.Lambda<Func<int, bool>>(numLessThanFive,new ParameterExpression[] { numParam });