如何从Expression <Func <T,bool >>谓词中获取属性,运算符和值?

djd*_*d87 6 c# linq reflection func expression-trees

有没有办法从一个Expression<Func<T>,bool>?拉出属性,运算符和匹配值?给出以下示例:

var customers = GetCustomers();
var customerQuery = customers.Where(x=> x.CustomerID == 1 
    && x.CustomerName == "Bob"); // The query is for illustration only
Run Code Online (Sandbox Code Playgroud)

我需要能够得到以下内容:

Property: CustomerID
Operator: Equals
Value:    1

Property: CustomerName
Operator: Equals
Value:    Bob
Run Code Online (Sandbox Code Playgroud)

我已经编写了一些可以提取Expression的属性名称的东西,但我似乎无法找到值和运算符的位置,尽管它在Expression的DebugView属性中非常清晰可见.

Mar*_*ell 8

该运营商将在BinaryExpressionMethod那是Equals节点.你还应该看一下表达式.NodeType,它揭示了很多(它应该是Equal).

通常将在一个ConstantExpression.Right的那个BinaryExpression,或在捕获的变量的情况下:所述捕获上下文将是ConstantExpression,这样的将是MemberExpression在一个ConstantExpression(你将需要调查构件是否为FieldInfoVS PropertyInfo,并通过.GetValue(...)该获取值).