如何在多个条件下构建Lambda表达式树 [英] How Build Lambda Expression Tree with multiple conditions
本文介绍了如何在多个条件下构建Lambda表达式树的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
注意:我知道使用动态linq创建它非常简单,但是我想学习.
Note: I know it's much simple to create this using dynamic linq but I want to learn.
我想创建一个查找"的lambda:Name = David AND Age = 10.
I want to create a lambda that "finds": Name=David AND Age=10.
class Person
{
public int Age { get; set; }
public string Name { get; set; }
}
var lambda = LabmdaExpression<Person>("Name", "David", "Age", 10);
static Expression<Func<T, bool>> LabmdaExpression<T>(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<T, bool>>(binaryExpression1, parameterExpression);
var ret2 = Expression.Lambda<Func<T, bool>>(binaryExpression2, parameterExpression);
}
推荐答案
Expression andExpression = Expression.AndAlso(binaryExpression1, binaryExpression2);
return Expression.Lambda<Func<T, bool>>(andExpression , parameterExpression);
编辑-评论
您只需将所有表达式链接在一起
You just chain together all your expresions
所以为了得到这个表达式 X AND(Y OR(Z OR Q))
so in order to get this expression 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);
这篇关于如何在多个条件下构建Lambda表达式树的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文