0

我正在查询两个数据库并尝试使用 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)'.

非常感谢你的帮助。

4

2 回答 2

0
    db.tb_DeviceGeFenceDetail.Join(db.tb_InventoryLog, Function(gfd) gfd.DeviceID, Function(il) il.deviceId, Function(gfd, il) New From { _
gfd.GeFenceLat1, _
gfd.GeFenceLng1, _
gfd.GeFenceLat2, _
gfd.GeFenceLng2, _
il.deviceName, _
il.DeviceIcon, _
gfd.DeviceID, _
il.id _
}).ToList().Where(Function(y) intValues.Contains(y.id))

您可以尝试加入类似这样的表格。

于 2014-03-03T13:48:45.373 回答
0

你试过这个吗?

Dim MismatchRows = From TableAData In ei _
    Join TableBData In e2 On _
        TableAData("ID") Equals TableBData("ID") And TableAData("Data") Equals TableBData("Time")
    Select .......
于 2014-03-02T01:48:07.690 回答