使用3个条件

时间:2017-09-04 07:54:57

标签: c# linq c#-4.0 lambda expression-trees

我想为此动态创建一个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个条件?

2 个答案:

答案 0 :(得分:3)

Expression.AndAlso有两个表达式。有一个重载需要三个参数,但第三个参数是一个方法的MethodInfo,它在两个操作数上实现操作(在{{ 1}}因为它不允许覆盖真实性的细节,所以第一个操作数仍然需要有AndAlsotrue运算符或者可以转换为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