Преобразовать выражение<Func <TModel, IList <TItem >>> в выражение<Func <TModel, IEnumerable >>

У меня есть какой-то метод:

public void Foo(Expression<Func<TModel, IEnumerable>> expression) {
  // foo
}

и у меня есть переменная:

Expression<Func<TModel, IList<TItem>>> expression;

Как я могу передать свою переменную Foo?

2 ответа

Решение

Вы должны преобразовать переменную выражения:

var exp = Expression.Lambda<Func<TModel, IEnumerable>>(expression.Body, expression.Parameters);
Foo(exp);

Использовать этот:

    public Expression<Func<TModel, IEnumerable>> ConvertExpression<TModel, TItem>(Expression<Func<TModel, IList<TItem>>> expression)
    {
        return (Expression<Func<TModel, IEnumerable>>)Expression
            .Lambda(Expression.Convert(expression.Body, typeof(IEnumerable)), expression.Parameters);
    }
Другие вопросы по тегам