【问题标题】:Join two data tables with variable number of columns连接两个具有可变列数的数据表
【发布时间】:2017-06-09 04:55:32
【问题描述】:

我正在尝试基于ID 列加入两个数据表,但我的问题是我的一个数据表的列数取决于请求。

第一个数据表(这将始终具有固定数量的列)-

 ID Int,
 firstCol Varchar,
 SecondCol Varchar

第二个数据表(这可以根据请求具有可变数量的列)-

 ID Int,
 dynamicCol1 varchar,
 dynamicCol2 varchar,
 dynamicCol3 varchar,
 // More or less columns depending on request

现在我想加入这两个数据表,如果可能的话,它应该以包含两个表中所有列的数据表的形式返回结果。

结果表或可枚举数据行列表 -

 ID Int,
 firstCol Varchar,
 SecondCol Varchar
 dynamicCol1 varchar,
 dynamicCol2 varchar,
 dynamicCol3 varchar,
 // More or less columns depending on request

我尝试关注linq,它加入了这些表,但我不确定如何从两个表中选择所有列。我尝试关注 linq,

//submissionData - First datatable
//responseData  - Second datatable
Dim resultData = From subData In submissionData.AsEnumerable()
                 Join resData In responseData.AsEnumerable()
                 On subData.Field(Of Integer)("ID") Equals resData.Field(Of Integer)("ID")
                 Select result = {resData, subData}
                 // Understandably this returns list of set of data rows separately. Which I have to flatten using more code.

我的问题是我要如何select 才能得到我想要的结果,

    Select result = {// what should do here to get the desired result instead of getting my result which needs more code to flatten it out}    

我当然可以编写更多代码并将我现在得到的结果展平,但我想知道是否有更好的方法来获得这个结果,因为我对 Linq 没有足够的了解。 任何指针/帮助将不胜感激。基于 C# 的帮助也将起作用。如有任何混淆查询,请随时发表评论。提前致谢。

【问题讨论】:

  • 到目前为止,我的想法还没有找到解决方案,但我的想法是:为什么不创建 linq 字符串然后调用它,比如说,像反射一样?
  • responseData的数据类型是什么?
  • @RobertMcKee 这两个都是数据表,其中submissionData 是数据表1,responseData 是描述中的数据表2
  • @muffi 我不确定这有多少效率以及需要多少努力。与其这样做,不如将数据行集展平。无论如何,您是否有任何相关链接或指针。
  • 在这种情况下,由于您的数据已经是数据表,我根本不会使用 LINQ,只需克隆 responseData,添加固定列,将第一个数据表转换为字典,然后循环通过新的数据表并设置值。

标签: c# vb.net linq join datatable


【解决方案1】:

寻找DataTable.Merge。 它通过每个表的 ID 合并两个表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-04
    • 1970-01-01
    • 2015-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多