0

一言で言えば、VS が実行時にのみ認識し、常に認識しているフィールドで 2 つのデータテーブルを結合するにはどうすればよいですか? のような解決策はありますか

    Dim result = From t1 In dt, t2 In dt2 _  
                     Where t1.Field < DateTime > ("timestamp") = t2.Field < DateTime > ("samplestamp")  
                     Select t1, t2

これらのテーブルは両方とも動的に作成されるため、これらのテーブルの名前は実行時にのみ認識されます。

長いバージョン:
コーナー A には、データを取得するヒストリアン サーバーがあります。このデータは、特定のプロセスで特定の時間に作成されたすべてのサンプルを表します
。コーナー B には、データを取得する SQL サーバーがあります。このデータは、指定された時間内に実行されたすべてのバッチを表します。

プロジェクトでは、この 2 つのテーブルをチャート コントロールに表示する必要があります。

さて、楽しい部分です。実行時にのみ、どの列が使用可能になるかを知ることができます。1 つのバッチが実行されたか、100 が実行されたかがわからないため、受信する列の数がわかりません。私が知っていることは、このすべての「データ」(実行時にのみ表示される)を受け取ることができるということです。2つのデータテーブル(vb.netは古いプロジェクトであるため)に配置できます
。 A)最初の列がタイムスタンプという名前のテーブルに常に存在します。(これは私がここで知っている唯一の列でもあります)
また、datatable2 の最初の列 (コーナー B) の名前が sampletime であることも知っています

ここでカウントダウンが始まります: 与えられた名前のこれら 2 つのデータテーブルを、チャート コントロールのデータソースとして使用する 1 つの派手なデータテーブルに接続するにはどうすればよいでしょうか。したがって、問題は解決されます。

私はこれを達成し、SQLサーバーに単一のSQLテーブルを作成しようとしましたが、ここでの問題は、トランザクションが好きではないサーバーで作業しているため、うまくいきませんでした。

4

1 に答える 1

3

ロングバージョンを読まなくても、できれば何かを見落としていなくても:

これらのテーブルを、パラメーターとして 2 つを取るメソッドに渡すことができDataTablesます。

次に、このコードを使用して再利用可能な を返すことができますIEnumerable(Of Tuple(Of DataRow, DataRow)):

Public Function getSomething(dt1 As DataTable, dt2 As DataTable) As IEnumerable(Of Tuple(Of DataRow, DataRow))
    Return From r1 In dt1
           Join r2 In dt2
            On r1.Field(Of DateTime)("timestamp") Equals r2.Field(Of DateTime)("samplestamp")
           Select Tuple.Create(r1, r2)
End Function

匿名型は、それらが作成されたメソッドの外で使用されることを意図していません。したがって、このタプルアプローチを使用しました。次の方法で戻り値を評価できます。

Dim rowInfos = getSomething(tbl1, tbl2)
For Each rowInfo In rowInfos
    Dim row1 = rowInfo.Item1
    Dim row2 = rowInfo.Item2
    Dim timestamp = row1.Field(Of DateTime)("timestamp")
    Dim samplestamp = row2.Field(Of DateTime)("samplestamp")
Next
于 2012-10-26T13:57:10.543 に答える