Vb.net LINQ将两个数据表与.进行比较,vb除外

Vb.net LINQ将两个数据表与.进行比较,vb除外,vb.net,linq,datatable,Vb.net,Linq,Datatable,这是我的情况,我需要一些帮助 我有三个数据表。1和2来自查询数据库,第三个是保存最终格式化表的表 dt1有8列, dt2有5列, 最后一个格式化的DTD。 我已经添加了从dt1到DTJOIN的所有行 每个表都有一个键ID字段,我需要从dt2中找到不在dt1中的行,并将它们添加到格式化的dt1中 这就是我到目前为止所做的: Dim query1 = (From a In dt1.AsEnumerable() Where Not a.IsNull("CustZ")

这是我的情况,我需要一些帮助

我有三个数据表。1和2来自查询数据库,第三个是保存最终格式化表的表

dt1有8列, dt2有5列, 最后一个格式化的DTD。 我已经添加了从dt1到DTJOIN的所有行

每个表都有一个键ID字段,我需要从dt2中找到不在dt1中的行,并将它们添加到格式化的dt1中

这就是我到目前为止所做的:

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)
这很好,因为在没有错误的情况下,我会拉出每个表的键字段,以便比较datarow

接下来,我想比较query2和query1,只返回dt1中没有的id

Dim notDt1 = query2.Except(query1).ToDataTable 
这就是我出错的地方。 错误是:

类型的未处理异常 中发生“System.Reflection.TargetParameterCountException” mscorlib.dll

其他信息:参数计数不匹配

我已经搜索了这个错误,没有发现任何适用于我的情况的东西。我迷路了,因为每个行集合只有一列

如果我能克服这个错误,我的下一步就是在dt1中没有的键上加入dt2,这样我就可以得到在比较表时从中删除的列

Dim queryGetAllColumns = (From a In dt2.AsEnumerable()
                          Join b In notDt1.AsEnumerable()
                          On a("id") Equals b("id")
                          Select a).CopyToDataTable()  

然后遍历queryGetAllColumns并将行添加到格式化的dtJoined表中。

我认为您的问题在于您正试图调用IEnumerableOf String类型的变量notDt1上的.ToDataTable。只需将.ToDataTable保留为不必要的即可。

我相信您的问题在于,您正试图对IEnumerableOf字符串类型的变量notDt1调用.ToDataTable,该变量是您查询的结果。不要使用.ToDataTable。这与C有什么关系?因此dt1有3列,dt2没有,对吗?如果是这样,您需要将它们添加到query2的结果集中,因为我不认为.Except可以处理两个列不匹配的数据表。如下所示:dt2.Columns.AddMyColumn,GetTypestring;除了他在使用。除了在选择相同字段的两个查询上。正确,我在使用。除了在只有一列的两个查询上。这与C有什么关系?所以dt1有3列,dt2没有,对吗?如果是这样,您需要将它们添加到query2的结果集中,因为我不认为.Except可以处理两个列不匹配的数据表。如下所示:dt2.Columns.AddMyColumn,GetTypestring;除了他正在使用。除了选择相同字段的两个查询。正确,我正在使用。除了只有一列的两个查询。谢谢NetMage,这有助于解决我遇到的问题。谢谢NetMage,这有助于解决我遇到的问题。