0

2 つのデータベースにクエリを実行し、結果セットを結合して、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

これを 100,000 行で実行するには FOREVER がかかります。

私はこれを次のように書き直そうとしています:

        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 に答える