为了演示,创建了一个类
public class Person { public string Name { get; set; } public int Age { get; set; } public string Address { get; set; } }
我们来看表达式树究竟是个什么东西
这个就是表达式树啦,可以看到它最重要的就是Body 在这里我们就可以找到我们写的表达式了
下面我们通过一个例子来看表达式树怎么用
因为内置的ExpressionType没有办法满足我们的要求,所以我们重写
public static class Ex { public static string TransfromNodeType(this ExpressionType ex) { switch (ex) { case ExpressionType.Add: return "+"; case ExpressionType.Equal: return "="; case ExpressionType.Multiply: return "*"; case ExpressionType.AndAlso: return "and"; default :return ""; } } }
然后我们简单的调用一下
static void Main(string[] args) { Expression<Func<Person, bool>> lamda = d => d.Name == "123123"; var e = (BinaryExpression)lamda.Body; string s = ((MemberExpression)e.Left).Member.Name + "=" + ((ConstantExpression)e.Right).Value; Console.WriteLine(s); Console.Read(); }
接下面我们写个复杂一点的