Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>I've got a pretty comprehensive answer <a href="https://stackoverflow.com/questions/2789504/get-the-property-as-a-string-from-an-expressionfunctmodel-tproperty/2789606#2789606">here</a>.</p> <p>In addition to dealing with expressions like <code>x =&gt; x.WeirdPropertyName</code>, it can also deal with "extended" expressions such as <code>x =&gt; x.WeirdMember.WeirdPropertyName</code>.</p> <p>Here's the code from that answer:</p> <pre><code>// code adjusted to prevent horizontal overflow static string GetFullPropertyName&lt;T, TProperty&gt; (Expression&lt;Func&lt;T, TProperty&gt;&gt; exp) { MemberExpression memberExp; if (!TryFindMemberExpression(exp.Body, out memberExp)) return string.Empty; var memberNames = new Stack&lt;string&gt;(); do { memberNames.Push(memberExp.Member.Name); } while (TryFindMemberExpression(memberExp.Expression, out memberExp)); return string.Join(".", memberNames.ToArray()); } // code adjusted to prevent horizontal overflow private static bool TryFindMemberExpression (Expression exp, out MemberExpression memberExp) { memberExp = exp as MemberExpression; if (memberExp != null) { // heyo! that was easy enough return true; } // if the compiler created an automatic conversion, // it'll look something like... // obj =&gt; Convert(obj.Property) [e.g., int -&gt; object] // OR: // obj =&gt; ConvertChecked(obj.Property) [e.g., int -&gt; long] // ...which are the cases checked in IsConversion if (IsConversion(exp) &amp;&amp; exp is UnaryExpression) { memberExp = ((UnaryExpression)exp).Operand as MemberExpression; if (memberExp != null) { return true; } } return false; } private static bool IsConversion(Expression exp) { return ( exp.NodeType == ExpressionType.Convert || exp.NodeType == ExpressionType.ConvertChecked ); } </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload