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

Popular posts from this blog

Java 3D LWJGL collision -

spring - SubProtocolWebSocketHandler - No handlers -

methods - python can't use function in submodule -