使用3个条件创建Lambda表达式
我想为此动态创建一个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个条件?
Expression.AndAlso
有两个表达式。 有一个带有三个参数的重载,但是第三个参数是一个方法的MethodInfo
,它实现了对两个操作数的操作(在AndAlso
的情况下还有进一步的限制,因为它不允许真实性的细节是重写,所以第一个操作数仍然需要有一个true
和false
运算符或者可以转换为bool
)。
所以你想要的是相当于:
(o => o.Year == year && (o.CityCode == cityCode && o.Status == status))
这将是:
var body = Expression.AndAlso( Expression.Equal( Expression.PropertyOrField(param, "Year"), Expression.Constant(year) ), Expression.AndAlso( Expression.Equal( Expression.PropertyOrField(param, "CityCode"), Expression.Constant(cityCode) ), Expression.Equal( Expression.PropertyOrField(param, "Status"), Expression.Constant(status) ) ) );
没有名为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