我使用以下方法从任何其他对象创建SelectListItem对象:
public static SelectListItem ToSelectListItem<T, TResult, TResult2>(T obj, Expression<Func<T, TResult>> value, Expression<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;
...
}
我使用这样的方法:
SelectListItem item = ToSelectListItem(obj, x => x.ID, x => x.Name);
它工作正常。但是,当我从关联对象中指定属性时,我得到的是属性的名称
SelectListItem item = ToSelectListItem(obj, x => x.ID, x => x.Profile.Name);
我可以从'x =&gt;获得的属性名称x.Profile.Name'只是'名字'而我真正想要的是'Profile.Name'。
任何建议都将不胜感激。
答案 0 :(得分:2)
这篇文章详细说明了如何实现这一目标:http://geekswithblogs.net/EltonStoneman/archive/2009/11/05/retrieving-nested-properties-from-lambda-expressions.aspx
答案 1 :(得分:2)
或者您可以使用
expression.Compile().Invoke(obj)
如果您想使用Expression<>
答案 2 :(得分:0)
使用Func代替Expression&lt;&gt;
要容易得多要操纵属性,我所要做的就是调用它:
expression.Invoke(obj);