c# - How to correct replace type of Expression? -
i have 2 classes:
public class dalmembershipuser { public string username { get; set; } //other members } public class membershipuser { public string username { get; set; } //other members }
i have function:
public ienumerable<dalmembershipuser> getmany(expression<func<dalmembershipuser, bool>> predicate) { //but here can use func<membershipuser, bool> //so made transformation query = query.where(expressiontransformer<dalmembershipuser,membershipuser>.tranform(predicate)); }
current implementation:
public static class expressiontransformer<tfrom, tto> { public class visitor : expressionvisitor { private parameterexpression _targetparameterexpression; public visitor(parameterexpression parameter) { _targetparameterexpression = parameter; } protected override expression visitparameter(parameterexpression node) { return _targetparameterexpression; } } public static expression<func<tto, bool>> tranform(expression<func<tfrom, bool>> expression) { parameterexpression parameter = expression.parameter(typeof(tto), expression.parameters[0].name); expression body = expression.body; new visitor(parameter).visit(expression.body); return expression.lambda<func<tto, bool>>(body, parameter); } }
//somewhere: .getmany(u => u.username == "username");
exception: property 'system.string username' not defined type 'membershipuser'
@ line: new visitor(parameter).visit(expression.body);
you need use result expression returned visit
method.
just change:
expression body = expression.body; new visitor(parameter).visit(expression.body);
by
expression body = new visitor(parameter).visit(expression.body);
Comments
Post a Comment