比较vb.net中的两个数据表
DataTable One仅包含一列(代码) 第二个Datatable也只包含一列(ProductCode) 我想使用最佳技术比较第一个数据表的所有值是否都存在于第二个数据表中。目前我使用的每一次,但一次是假的,第二次是真的,所以它看起来不实用比较vb.net中的两个数据表,vb.net,linq,datatable,Vb.net,Linq,Datatable,DataTable One仅包含一列(代码) 第二个Datatable也只包含一列(ProductCode) 我想使用最佳技术比较第一个数据表的所有值是否都存在于第二个数据表中。目前我使用的每一次,但一次是假的,第二次是真的,所以它看起来不实用 Applicable = False For Each chkRow As DataRow In chk.Rows For Each dtRow As DataRow In dt.Rows If chkRow("Product
Applicable = False
For Each chkRow As DataRow In chk.Rows
For Each dtRow As DataRow In dt.Rows
If chkRow("ProductCode") = dtRow("Code") Then
Applicable = True
Exit For
Else
Applicable = False
End If
Next
Next
请建议更好的解决方案。我倾向于使用LINQ查询:
Dim code=table1.AsEnumerable()。
选择(函数(行)行。字段(整数)(“代码”))
Dim productCodes=表2.AsEnumerable()。
选择(函数(行)行。字段(整数)(“产品代码”))。
ToArray()
如果codes.All(函数(代码)productCodes.Contains(代码)),则
'...
如果结束
请注意,存在对productCodes的ToArray调用,而不是对codes的调用。这是因为productCodes需要多次枚举,而您不希望在延迟查询中执行此操作。@abdullah,声明它。@abdullah,看来我最初对Lambda参数使用了错误的名称,但@Jimi已为我们编辑了此名称。这就是我直接在答案中输入代码而不是在IDE中,然后复制/粘贴得到的结果。我还在
If
语句中添加了一个缺少的右括号。您的问题已回滚到原始版本,其中有答案。这样一个激烈的编辑改变了原来的问题,你应该考虑创造一个新的问题。
ProductCode
2
3
6
7
Applicable = False
For Each chkRow As DataRow In chk.Rows
For Each dtRow As DataRow In dt.Rows
If chkRow("ProductCode") = dtRow("Code") Then
Applicable = True
Exit For
Else
Applicable = False
End If
Next
Next