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
Post a Comment