我正在查询两个数据库并尝试使用 LINQ 加入结果集并从中查询。看起来这将是一项简单的任务,但如果不进行明确的加入,我就会遇到重大的性能问题。当我进行显式连接时,我在使用 VB 语法来使事物显式类型时遇到问题。工作代码,清理:
For Each CurrRow In ResultsA.Tables(15).Rows
CurrDate = CurrRow("Date")
CurrID = CurrRow("ID")
CurrVal = CurrRow("Val")
Dim ResultsB = From SMW In DataSetA.Tables(0).AsEnumerable() _
Where SMW("ID") = CurrScheduleID And SMW("Time") = CurrProfileDate _
Select UTC_TS = SMW("Time"), Value = (SMW("VALUE") / 1000), Time_Zone = SMW("Time_Zone"), ID = SMW("ID")
Dim CurrentResult As Object
Dim boolSchedDateFound As Boolean = False
For Each CurrentResult In ResultsB
If CurrentResult.Value <> CurrVal Then
'LogIntegrityCheckErrorRow()
End If
boolSchedDateFound = True
Next
Next
这需要 FOREVER 运行 100,000 行。
我一直在尝试将其重写为:
Dim MismatchRows = From TableAData In DataSetA.Tables(0).AsEnumerable() Join TableBData In DataSetB.Tables(15).AsEnumerable() _
On New With {.TableAID = Convert.ToInt32(TableAData("ID")), .TableATime = Convert.ToDateTime(TableAData("Date"))} _
Equals New With {.TableBDID = Convert.ToInt32(TableBData("ID")), .TableBTime = Convert.ToDateTime(TableBData("Time"))} _
Select .................. (Hard to clean up, but this isn't the part that's failing)
而且我对此感到很厌烦。根本问题是缺乏强类型。我看过,但似乎没有什么建议,因为大多数这样做的人都会在数据上构建 EF。这不是一个糟糕的主意,但需要进行大量的重新设计。所以。摆在我面前的问题,如何消除错误:
'Equals' cannot compare a value of type '<anonymous type> (line 2641)' with a value of type '<anonymous type> (line 2642)'.
非常感谢你的帮助。