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