如何提取传递给表达式<func <t,bool>&gt;的属性名称和值?</func <t,bool>

时间:2011-09-15 15:43:30

标签: c# lambda

我们假设我有一个这样的方法:

public static List<T> Get<T>(this SomeObject<T>, Expressions<Func<T,bool>> e){

//get the property name and value they want to check is true / false
...

}

TheObject().Get(x => x.PropertyName == "SomeValue");

当我将其传递给Get扩展方法时,如何获得“PropertyName”和“SomeValue”?

3 个答案:

答案 0 :(得分:11)

我认为这就是你所追求的目标

BinaryExpression expression = ((BinaryExpression)e.Body);
string name = ((MemberExpression)expression.Left).Member.Name;
Expression value = expression.Right;


Console.WriteLine(name);
Console.WriteLine(value);

输出:

PropertyName
SomeValue

错误检查留给读者练习......

答案 1 :(得分:0)

 var expressionBody= e.Body.ToString();

将返回如下字符串:

//"(x.PropertyName == \"SomeValue\")"

还有更准确的方法(例如编译它),但编译表达式的性能对于你所要求的内容非常糟糕

答案 2 :(得分:0)

System.Web.Mvc命名空间可能可以帮助您重新滚动它。看看ModelMetadata.FromLambdaExpression<TParameter, TValue>