18
注意:我知道使用動態LINQ創建這個過程非常簡單,但我想學習。如何構建具有多個條件的Lambda表達式樹
我想創建一個「找到」的lambda: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);
}
這個工程!還有一個問題 比方說,我想測試一些非二進制的東西,比如:X AND(Y OR Z OR Q),我是否也需要對它進行配對呢? – jullin 2011-06-09 16:19:53
@jullin - 我的更新會回答你的問題嗎? – Aducci 2011-06-09 16:30:53