好吧,我想要做的是從它們各自的數據庫中獲取兩個數據集,並使用由Join擴展方法形成的Linq查詢來連接它們。 Linq查詢之前做過工作,但經過一些重構(在代碼的其他部分)之後,它不再存在。我真的看不出有什麼不同。如何調試Linq - 連接方法永遠不會到達ResultSelector
我已經擴展了KeySelectors和ResultSelector以便能夠在其中放置斷點。這兩個枚舉(localSeq和remoteSeq)工作正常,他們得到了正確數量的元素等。兩個序列的元素被格式化爲Object()。 KeySelectors(由函數CompositeJoinKeySelector實現)似乎也可以工作。這個函數應該做的是從每個元素中選擇正確的字段,以便.Join方法知道如何檢查相等性。這似乎是失敗的這一步(檢查是否相等)。
當我遍歷代碼時,linq查詢遍歷兩個數據集並執行KeySelector。這似乎返回了預期的值。然而,之後,它不會在ResultSelector中中斷。在我看來,這意味着它永遠無法處理結果,因爲他沒有找到匹配的「行」。這很奇怪,因爲我逐步執行並且兩個KeySelectors都返回一個二維Object數組,並且匹配的條目當然存在。
有沒有什麼辦法可以看到這個(大概)嵌套循環過程,並查看平等比較失敗的地方?
Dim LocalSeq As IEnumerable(Of Object()) = From locRow As Object() In LocalArray
Dim RemoteSeq As IEnumerable(Of Object()) = From remRow As Object() In RemoteArray
Dim joinSeq As IEnumerable(Of Object()) = LocalSeq.Join(Of Object(), Object, Object())(RemoteSeq, _
Function(locRow As Object())
Dim locRes As Object() = CompositeJoinKeySelector(locRow, LocalKeyList)
Return locRes
End Function, _
Function(remRow As Object())
Dim remRes As Object() = CompositeJoinKeySelector(remRow, RemoteKeyList)
Return remRes
End Function, _
Function(locRow As Object(), remRow As Object())
Dim joinRes As Object() = JoinRowArrays(locRow, remRow, FinalJoinSelectColumnList)
Return joinRes
End Function)
Return joinSeq.ToArray()