使用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的情况下还有进一步的限制,因为它不允许真实性的细节是重写,所以第一个操作数仍然需要有一个truefalse运算符或者可以转换为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