【发布时间】:2017-05-04 18:02:29
【问题描述】:
这是我的情况,我需要一些帮助。
我有三个数据表。 1 和 2 来自查询数据库,第三个是一个表格,将保存最终格式化的表格。
dt1 有 8 列, dt2 有 5 列, 和最终格式化的 dtJoined。 我已经添加了从 dt1 到 dtJoined 的所有行。
每张表都有一个key 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 并且只返回 id 不在 dt1 中。
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 表中。
【问题讨论】:
-
这和C#有什么关系?
-
所以 dt1 有 3 列而 dt2 没有,对吗?如果是这样,您需要将它们添加到 query2 的结果集中,因为我认为 .Except 不适用于 2 个列不匹配的数据表。像这样:dt2.Columns.Add("MyColumn", GetType(string));
-
除非他在
Select相同字段的两个查询上使用.Except。 -
正确,我在只有一列的两个查询上使用 .Except。