c# - Remove part of Expression -


i have generic method:

public void expressionbuilder<t>() t: ientity {    expression<func<t, long>> expr = e => e.id; //id part of ientity    ... } 

the resulted expression contains casting of t ientity: e => convert(e).id want remove casting (to make possible ef generate sql). in other words replace convert(e) e.

if assume public long id {get;} on t, , expression simple, maybe build manually:

var param = expression.parameter(typeof (t), "e"); var lambda = expression.lambda<func<t, long>>(           expression.propertyorfield(param,"id"), param); 

a visitor should work more complex examples; example:

internal class flatteninterface<t> : expressionvisitor {     protected override expression visitmember(memberexpression node)     {         if(node.member.declaringtype == typeof(t))         {             return expression.makememberaccess(                 node.expression,                 node.expression.type.getmember(node.member.name).single());         }         return base.visitmember(node);     } } 

and

var direct = (expression<func<t, long>>)new flatteninterface<ientity>()        .visit(expr); 

Comments

Popular posts from this blog

c# - How to set Z index when using WPF DrawingContext? -

razor - Is this a bug in WebMatrix PageData? -

visual c++ - Using relative values in array sorting ( asm ) -