I\'ve been searching but I can\'t find how to cast from the type
Expression>
to the type:
Exp
The answers from Rob and Jon Skeet have one problem.
You get something like x => Convert(x.PropertyName)
, but often for instance for ASP.NET MVC you want an expression like this x => x.PropertyName
So Expression.Convert
is "polluting" the expression for some cases.
Solution:
public static class LambdaExpressionExtensions
{
public static Expression> ToUntypedPropertyExpression (this Expression> expression)
{
var memberName = ((MemberExpression)expression.Body).Member.Name;
var param = Expression.Parameter(typeof(TInput));
var field = Expression.Property(param, memberName);
return Expression.Lambda>(field, param);
}
}
Usage:
Expression> expression = ...;
Expression> expr = expression.ToUntypedPropertyExpression();