如何提取传递到表达式<;Func<;T、 bool>>;

本文关键字:lt gt Func bool 表达式 何提取 提取 | 更新日期: 2023-09-27 18:08:37

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

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");

当我将"PropertyName"answers"SomeValue"传递到get扩展方法时,如何获得它?

如何提取传递到表达式<;Func<;T、 bool>>;

我想这就是你追求的原因

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

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

输出:

PropertyName
SomeValue

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

System.Web.Mvc命名空间可能会帮助您重新实现这一点。看看ModelMetadata.FromLambdaExpression<TParameter, TValue>

 var expressionBody= e.Body.ToString();

将返回如下字符串:

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

还有更准确的方法可以做到这一点(例如编译它(,但编译表达式的性能对于来说真的很糟糕