表达式树是.NET 3.5之后引入的,它是一个强大灵活的工具(比如用在LINQ中构造动态查询)。
表达式树的语法如下:
Expression<Func<type,returnType>> = (param) => lamdaexpresion;
吃个栗子:
Expression<Func<int, int, int>> expr = (x, y) => x+y;
这就是一个表达式树了。使用Expression Tree Visualizer工具(直接调试模式下看也可以,只不过没这个直观)在调试模式下查看这个表达式树(就是一个对象),如下:
可以看到表达式树主要由下面四部分组成:
1、Body 主体部分
2、Parameters 参数部分
3、NodeType 节点类型
4、Lambda表达式类型
自己尝试构建上面的表达式树:
static void Main(string[] args)
{
//参数的构建 (定义参数的名字和参数的类型)
ParameterExpression exp1 = Expression.Parameter(typeof(int), "a");
ParameterExpression exp2 = Expression.Parameter(typeof(int), "b");
//表达式主体的构建
BinaryExpression exp = Expression.Add(exp1, exp2);
//表达式树的构建(如下定义,表达式的类型为Lambda
//lambda表达式的类型为Func<int, int, int>)
var lambda = Expression.Lambda<Func<int, int, int>>(exp, exp1, exp2);
Console.WriteLine(lambda.ToString());
Console.ReadKey();
}
运行结果:
在这里我们对表达式树有了初步的了解,接下来就需要看看表达式树的重要作用了,动态LINQ查询!请看下一篇!