C#Custom Linq Provider

时间:2016-11-02 12:09:07

标签: c# linq

我正在根据https://msdn.microsoft.com/en-us/library/bb546158.aspx

上的非常有用的文章开发一个自定义linq提供程序

但是,当涉及到'Not'运算符时,我会陷入困境。例如,我正在使用条件!a.Name.Equals("2 Test")进行测试。这转换为lambda表达式{Not(a.Name.Equals("2 Test"))}

当我调用ExpressionVisitor.Visit(expression)时,在此表达式上调用我的VisitMethodCall覆盖。但是,该调用收到的MethodCallExpression参数缺少表达式的Not部分,即:{a.Name.Equals("2 Test")}

没有调用其他覆盖(我已经覆盖了所有可用的覆盖)。这似乎使得无法处理表达式的Not部分 - 但是我确信不会出现这种情况!

任何人都可以为我阐明这一点吗? AHA,Ben:)

1 个答案:

答案 0 :(得分:4)

那是因为Not是一元表达式,因此首先调用VisitUnary方法。