表达式树基础
表达式树表示树状数据结构中的代码,其中每个节点都是表达式
Expression Trees 支持动态修改可执行代码,在各种数据库中执行 LINQ 查询以及创建动态查询。你可以编译和运行表达式树所代表的代码。
它们还用于动态语言运行时(DLR),以提供动态语言和 .NET Framework 之间的互操作性,并使编译器编写器能够发出表达式树而不是 Microsoft 中间语言(MSIL)。
表达树可以通过创建
- 匿名 lambda 表达,
- 通过使用 System.Linq.Expressions 命名空间手动。
来自 Lambda 表达式的表达式树
将 lambda 表达式分配给 Expression 类型变量时,编译器会发出代码以构建表示 lambda 表达式的表达式树。
以下代码示例显示如何让 C#编译器创建表示 lambda 表达式 num => num <5 的表达式树。
Expression<Func<int, bool>> lambda = num => num < 5;
使用 API表达树
表达式树也使用表达式类创建。此类包含用于创建特定类型的表达式树节点的静态工厂方法。
以下是几种类型的 Tree 节点。
- ParameterExpression
- 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 });