How to get the full name of the property from a lambda
I use the following method to create a SelectListItem object from any other object:
public static SelectListItem ToSelectListItem<T, TResult, TResult2>(T obj, Expression<Func<T, TResult>> value, Expressio开发者_开发知识库n<Func<T, TResult2>> text)
{
string strValue = String.Empty;
string strText = String.Empty;
if (value != null)
strValue = (value.Body as MemberExpression).Member.Name;
if (text != null)
strText = (text.Body as MemberExpression).Member.Name;
...
}
I use this method like this:
SelectListItem item = ToSelectListItem(obj, x => x.ID, x => x.Name);
And it works fine. However, when I specify a property from an associated object all I get is the name of the property
SelectListItem item = ToSelectListItem(obj, x => x.ID, x => x.Profile.Name);
The property name I'm able to get from 'x => x.Profile.Name' is only 'Name' and what I really wanted to get was 'Profile.Name'.
Any suggestions would be appreciated.
Or you can use
expression.Compile().Invoke(obj)
if you want to use Expression<>
This post details clearly how to achieve this: http://geekswithblogs.net/EltonStoneman/archive/2009/11/05/retrieving-nested-properties-from-lambda-expressions.aspx
It's much easier to use Func instead of Expression<>
To manipulate the property all I have to do is invoke it:
expression.Invoke(obj);
精彩评论