How to cast Expression> to Expression>

后端 未结 4 1822
借酒劲吻你
借酒劲吻你 2020-11-29 02:12

I\'ve been searching but I can\'t find how to cast from the type

Expression>

to the type:

Exp         


        
4条回答
  •  無奈伤痛
    2020-11-29 03:01

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

提交回复
热议问题