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)'.
手伝ってくれてどうもありがとう。