如何调试Linq-Join方法永远不会到达ResultSelector



好吧,我要做的是从它们各自的数据库中提取两个数据集,并使用由join扩展方法形成的Linq查询来连接它们。Linq查询以前确实有效,但经过一些重构(在代码的其他部分)后,它就不再有效了。我真的看不出有什么不同。

我已经扩展了KeySelectors和ResultSelector,以便能够在它们中放置断点。这两个枚举(localSeq和remoteSeq)运行良好,它们得到了正确数量的元素等。这两个序列的元素都被格式化为Object()。KeySelectors(由函数CompositeJoinKeySelector实现)似乎也能工作。这个函数应该做的是从每个元素中选择正确的字段,这样。Join方法知道如何检查相等性。似乎是这一步(检查是否相等)失败了。

当我遍历代码时,linq查询在两个数据集中循环并执行KeySelector。这似乎返回了预期的值。但是,之后它不会在ResultSelector中中断。在我看来,这意味着它永远无法处理结果,因为他没有找到匹配的"行"。这很奇怪,因为我完成了执行过程,两个KeySelector都返回了一个二维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()

好的,比较似乎失败了,因为默认情况下使用了引用比较。因此,我通过实现IEqualityComparer解决了这个问题。

最新更新