using System; using System.Collections.Generic; using System.Linq.Expressions; using System.Reflection; using System.Text; namespace VLB { public static class ReflectionUtils { public static string GetFieldPath(Expression> expr) { MemberExpression me; switch (expr.Body.NodeType) { case ExpressionType.Convert: case ExpressionType.ConvertChecked: var ue = expr.Body as UnaryExpression; me = (ue != null ? ue.Operand : null) as MemberExpression; break; default: me = expr.Body as MemberExpression; break; } var members = new List(); while (me != null) { members.Add(me.Member.Name); me = me.Expression as MemberExpression; } var sb = new StringBuilder(); for (int i = members.Count - 1; i >= 0; i--) { sb.Append(members[i]); if (i > 0) sb.Append('.'); } return sb.ToString(); } } }