我想为此动态创建一个lambda表达式:
(o => o.Year == year && o.CityCode == cityCode && o.Status == status)
我写这个:
var body = Expression.AndAlso(
Expression.Equal(
Expression.PropertyOrField(param, "Year"),
Expression.Constant(year)
),
Expression.Equal(
Expression.PropertyOrField(param, "CityCode"),
Expression.Constant(cityCode)
)
,
Expression.Equal(
Expression.PropertyOrField(param, "Status"),
Expression.Constant(status)
)
);
但对于这段代码:
Expression.Equal(
Expression.PropertyOrField(param, "Status"),
Expression.Constant(status)
)
我收到了一个错误:
无法转换为System.Linq.Expressions.BinaryExpression'到' System.Reflection.MethodInfo'
如何为lambda表达式添加3个条件?
答案 0 :(得分:3)
Expression.AndAlso
有两个表达式。有一个重载需要三个参数,但第三个参数是一个方法的MethodInfo
,它在两个操作数上实现和操作(在{{ 1}}因为它不允许覆盖真实性的细节,所以第一个操作数仍然需要有AndAlso
和true
运算符或者可以转换为false
)
所以你想要的是相当于:
bool
这将是:
(o => o.Year == year && (o.CityCode == cityCode && o.Status == status))
答案 1 :(得分:0)
没有名为Expression.AndAlso的方法可以将3个表达式作为参数。
请参阅以下链接,
https://msdn.microsoft.com/en-us/library/bb353520(v=vs.110).aspx
https://msdn.microsoft.com/en-us/library/bb382914(v=vs.110).aspx