【发布时间】: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