这是我的情况,我可以使用一些帮助。
我有三个数据表。 1和2来自查询数据库,第三个是一个将保存最终格式化表的表。
dt1有8列, dt2有5列, 和最终格式化的dtJoined。 我已经将所有行从dt1添加到dtJoined。
每个表都有一个密钥ID字段,我需要从dt2中找到不在dt1中的行,并将它们添加到格式化的dtJoined中。
这是我到目前为止所做的:
Dim query1 = (From a In dt1.AsEnumerable()
Where Not a.IsNull("CustZ")
Select a.Field(Of String)("id").Trim)
Dim query2 = (From a In dt2.AsEnumerable()
Select a.Field(Of String)("id").Trim)
这很好(因为没有错误),我拉出每个表的关键字段,以便我可以比较数据行
接下来我想比较query2和query1,只返回不在dt1中的id。
Dim notDt1 = query2.Except(query1).ToDataTable
这是我收到错误的地方。 错误是:
未处理的类型异常 发生'System.Reflection.TargetParameterCountException' mscorlib.dll中
附加信息:参数计数不匹配。
我搜索过这个错误,并没有遇到任何我可以应用于我的情况。我迷路了,因为每个行集只有一列。
如果我可以通过此错误,我的下一步是将dt2加入到dt1中没有的键上,这样我就可以获得在比较表时删除的列。
Dim queryGetAllColumns = (From a In dt2.AsEnumerable()
Join b In notDt1.AsEnumerable()
On a("id") Equals b("id")
Select a).CopyToDataTable()
然后遍历queryGetAllColumns并将行添加到格式化的dtJoined表中。
答案 0 :(得分:0)
我认为您的问题是,您是要尝试.ToDataTable
来自notDt1
的变量IEnumerable(Of String)
,该变量来自您的查询。只需不用.ToDataTable
即可。