可能重复:
Get method name and type using lambda expression
Can I use Expression<Func<T, bool>> and reliably see which properties are referenced in the Func<T, bool>?
您好,
我想要一个方法,我可以像这样使用
<% Html.TextBoxFor(x=>x.Property, Helper.GetAttributes<ViewModel>(x=>x.PropertyA)) %>
方法标题如下所示
public static Dictionary<string, string> GetAttributeValues<T>(Expression<Func<T, object>> myParam)
但我如何找到PropertyA的名称?我需要在返回正确的属性之前做一些检查。 提前谢谢..
欢呼声
PS:感谢发帖How to get names from expression property?我找到了解决方案
它是
public static Dictionary<string, string> GetAttributeValues<T>(Expression<Func<T, object>> myParam)
{
var item = myParam.Body as UnaryExpression;
var operand = item.Operand as MemberExpression;
Log.Debug(operand.Member.Name);
}
答案 0 :(得分:2)
创建ModelMetadata类的实例:
var data = ModelMetadata.FromLambdaExpression<T, object>(myParam);
现在,您可以获得所需的所有信息,包括模型中使用的属性:
var propName = data.PropertyName;
var label = data.DisplayName;
答案 1 :(得分:1)
那可能是:
string propertyName = ((MemberExpression) myParam.Body).Member.Name;
在生产代码中,您应该在转换之前检查Expression类型,如果传入的表达式不是MemberExpression,则抛出适当的异常。