linq - Get string version of lambda expression property -


similar question how can property name strings used in func of t.

let's had lambda expression stored in variable called "getter"

expression<func<customer, string>> productnameselector =     customer => customer.product.name; 

how can extract string "product.name" that?

i fixed haxy

var expression = productnameselector.tostring(); var token = expression.substring(expression.indexof('.') + 1); 

but i'd find more solid way ;-)

the expression tree expression looks this:

           .           / \          .   name         / \ customer   product 

as can see, there no node represent product.name. can use recursion , build string yourself:

public static string getpropertypath(lambdaexpression expression) {     return getpropertypathinternal(expression.body); }  private static string getpropertypathinternal(expression expression) {     // node represents parameter of expression; we're ignoring     if (expression.nodetype == expressiontype.parameter)         return null;      // node member access; use recursion left part     // , append right part     if (expression.nodetype == expressiontype.memberaccess)     {         var memberexpression = (memberexpression)expression;          string left = getpropertypathinternal(memberexpression.expression);         string right = memberexpression.member.name;          if (left == null)             return right;          return string.format("{0}.{1}", left, right);     }      throw new invalidoperationexception(         string.format("unknown expression type {0}.", expression.nodetype)); } 

Comments

Popular posts from this blog

django - How can I change user group without delete record -

java - EclipseLink JPA Object is not a known entity type -

java - Need to add SOAP security token -