2016-11-02 207 views
2

我正在開發一個自定義的LINQ提供以下的https://msdn.microsoft.com/en-us/library/bb546158.aspxC#自定義LINQ提供程序

然而,當涉及到「不」操作我陷入發現非常有用的文章。例如,我正在使用條件!a.Name.Equals("2 Test")進行測試。這轉換爲lambda表達式{Not(a.Name.Equals("2 Test"))}

當我打電話ExpressionVisitor.Visit(expression),在這個表達式上,我的VisitMethodCall覆蓋被調用。但是,該調用接收到的MethodCallExpression參數缺少表達式的非部分,即:{a.Name.Equals("2 Test")}

沒有其他覆蓋被稱爲(我已覆蓋所有可用)。這似乎使它不可能處理表達式的一部分 - 但是我相信這不可能是這種情況!

任何人都可以爲我闡明這一點嗎? AHA,Ben :)

+0

顯示你的'ExpressionVisitor' – haim770

回答

4

這是因爲Not是一個一元表達式,所以VisitUnary方法首先被調用。

+0

這正是我想要的,謝謝!由於某些原因VS沒有顯示它是一個可用的覆蓋... – Ben