是否有.NET Framework替代ExpressionHelper.GetExpressionText(LambdaExpression)
?
我在一些无法引用System.Web.Mvc。
我理解其中一种可能性就是编写自己的GetExpressionText(LambdaExpression)
方法实现,但我不想这样做。我的目标是重用已有的.NET Framework代码。
答案 0 :(得分:8)
自己实现该方法非常简单:
string GetPropertyName(LambdaExpression expression)
{
var body = (MemberExpression)expression.Body;
return body.Member.Name;
}
如果传入的lambda不是MemberExpression
,它将抛出异常(尽管您可能需要更具描述性的异常)。
如果您想直接调用此方法,例如GetPropertyName(x => x.ID)
,则需要知道x
的类型。一种方法是类型参数:
string GetPropertyName<T>(Expression<Func<T, object>> expression)
{
var body = (MemberExpression)expression.Body;
return body.Member.Name;
}
但这意味着您必须明确指定它:
GetPropertyName<Foo>(f => f.Id)