Преобразовать выражение<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);
}