https://msdn.microsoft.com/en-us/library/bb382914(v=vs.110).aspx

у создать лямбда-выражение динамически для этого:

(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»

Как я могу добавить 3 условия к лямбда-выражению?

 Arian04 сент. 2017 г., 10:05
@ArghyaC Я обновляю свои вопросы ...
 Arghya C04 сент. 2017 г., 10:04
Тебе нужноstatus в нижнем регистре для переменной? Теперь вы проходитеStatus тип?
 Ivan Stoev04 сент. 2017 г., 10:00
AndAlso этоBinaryExpressionто есть имеет 2 операнда. Если у вас есть более 2, вы должны объединить несколькоAndAlsoт.е.AndAlso(AndAlso(op1, op2), op3) и т.п.
 Mong Zhu04 сент. 2017 г., 09:58
что такоеStatus ?
 Arian04 сент. 2017 г., 10:00
@MongZhu Я обновляю Ques. Пожалуйста, посмотрите это снова

Ответы на вопрос(2)

Решение Вопроса

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)
        )
    )
);

который может принимать 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

Ваш ответ на вопрос