如何使用多个条件构建Lambda表达式树

注意:我知道使用动态linq创建它很简单,但我想学习。

我想创建一个“找到”的lambda:Name = David AND Age = 10。

class Person { public int Age { get; set; } public string Name { get; set; } } var lambda = LabmdaExpression("Name", "David", "Age", 10); static Expression<Func> LabmdaExpression(string property1, string value1, string property2, int value2) { ParameterExpression parameterExpression = Expression.Parameter(typeof(Person), "o"); MemberExpression memberExpression1 = Expression.PropertyOrField(parameterExpression, property1); MemberExpression memberExpression2 = Expression.PropertyOrField(parameterExpression, property2); ConstantExpression valueExpression1 = Expression.Constant(value1, typeof(string)); ConstantExpression valueExpression2 = Expression.Constant(value2, typeof(int)); BinaryExpression binaryExpression1 = Expression.Equal(memberExpression1, valueExpression1); BinaryExpression binaryExpression2 = Expression.Equal(memberExpression2, valueExpression2); var ret1 = Expression.Lambda<Func>(binaryExpression1, parameterExpression); var ret2 = Expression.Lambda<Func>(binaryExpression2, parameterExpression); } 

 Expression andExpression = Expression.AndAlso(binaryExpression1, binaryExpression2); return Expression.Lambda>(andExpression , parameterExpression); 

编辑 – 评论

您只需将所有表达链接在一起即可

所以为了得到这个表达式X AND(Y OR(Z OR Q))

 Expression ZorQ = Expression.OrElse(zExp, qExp); Expression YorZorQ = Expression.OrElse(yExp, ZorQ); Expression XandYorZorQ = Expression.AndAlso(xExp, YorZorQ);