Преобразовать выражение> к выражению> вводя константу для Т - PullRequest
6 голосов
/ 01 июля 2010

У меня есть выражение в формате Expression<Func<T, T2, bool>>, которое мне нужно преобразовать в выражение в формате Expression<Func<T2, bool>>, заменив T в первом выражении на постоянное значение.

Мне нужночтобы это оставалось выражением, поэтому я не могу просто вызвать выражение с константой в качестве первого параметра.

Я смотрел здесь другие вопросы о деревьях выражений, но не могу найти решениек моей проблеме.Я подозреваю, что мне нужно пройтись по дереву выражений, чтобы ввести константу и удалить один параметр, но я даже не знаю, с чего начать.(

1 Ответ

5 голосов
/ 01 июля 2010

Вы можете использовать Expression.Invoke , чтобы создать новое лямбда-выражение, которое вызывает другое:

static Expression<Func<T2, bool>> PartialApply<T, T2>(Expression<Func<T, T2, bool>> expr, T c)
{
    var param = Expression.Parameter(typeof(T2), null);
    return Expression.Lambda<Func<T2, bool>>(
        Expression.Invoke(expr, Expression.Constant(c), param), 
        param);
}
...