0

简而言之:如何在 VS 仅在运行时知道并且我一直都知道的字段上加入两个数据表?有没有类似的解决方案

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

这些表的名称仅在运行时才知道,因为这两个表都是动态创建的。

长版:
在角落 A,我有一个 Historian 服务器,我可以在其中获取一些数据。该数据代表在给定时间内为给定过程创建的所有样本
。该数据代表在给定时间内运行的所有批次。

该项目需要将这 2 个表格显示在图表控件中。

现在是有趣的部分。只有在运行时,我才能知道哪些列可用。我不知道我会收到多少列,因为我不知道是 1 批运行还是 100 批运行。我所知道的是我可以接收所有这些“数据”(我只在运行时看到)可以放入 2 个数据表(vb.net,因为它是一个旧项目)
我“知道”例如数据表 1(角落A) 始终存在于第一列名为时间戳的表中。(这也是我在这里知道的唯一一列)
而且我还知道 datatable2 中的第一列(角 B)被命名为 sampletime

所以倒计时来了:我如何将给定名称上的这两个数据表连接到一个华丽的数据表中,然后我将其用作图表控件的数据源。因此问题就解决了。

我试图完成这个并在 SQL-server 中创建一个单一的 sql 表,这里的问题是我使用的服务器不喜欢事务,所以没有成功。

4

1 回答 1

3

没有阅读Longversion并且希望没有忽略一些东西:

您可以将这些表传递给以两个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 回答