我正在按照 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
表达式的一部分 - 但我确信事实并非如此!
有人可以帮我解释一下吗? 啊哈,本:)
最佳答案
这是因为 Not
是一元表达式,因此 VisitUnary首先调用方法。
关于C# 自定义 Linq 提供程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40379613/