数据表错误 - 无法复制到数据表()



假设我有以下两个数据表:

Table1:                               Table2:
Col1:                                 Col1:         Col2:
1                                     1             a
2                                     2             b
2                                     3             c
3                                     4             d
3                                     5             e
4                                     6             f
                                      7             g

我想要一个简单的Linq查询,创建第三个数据表基于两者之间的连接,并给出不同的值-如下所示:

Result:
Col1:       Col2:
1           a
2           b
3           c
4           d

我以为这样就行了:

Dim Result as DataTable = (From dr1 As DataRow In Table1.AsEnumerable
             Join dr2 As DataRow In Table2.AsEnumerable
             On dr1.Field(Of Double)("Col1") Equals dr2.Field(Of Double)("Col1")
             Select New With {
                                 .Col1 = dr1.Field(Of Double)("Col1"),
                                 .Col2 = dr2.Field(Of String)("Col2")
                             }).Distinct.CopyToDataTable

但是无论我尝试什么,我都会得到许多不同的错误…

我的第一个错误是CopyToDataTable方法不是System.Generic.IEnumerable的成员

当我删除它,并保留它为:

Dim Result = (From dr1 As DataRow In Table1.AsEnumerable
             Join dr2 As DataRow In Table2.AsEnumerable
             On dr1.Field(Of Double)("Col1") Equals dr2.Field(Of Double)("Col1")
             Select New With {
                                 .Col1 = dr1.Field(Of Double)("Col1"),
                                 .Col2 = dr2.Field(Of String)("Col2")
                             }).Distinct

它运行,但它不过滤结果下来到一个唯一的列表-它离开所有的col1值从Table1在那里。

我正试图理解Linq,但我显然错过了一些东西-有人能向我解释一下这里发生了什么以及如何解决这个问题吗?


作为@Magnus解决方案的补充,对于将来遇到这种问题的任何人,匿名类型IEnumerable的CopyToDataTable方法(正如Magnus指出的,我在这个问题中给出的)可以在这里找到,并在这里实现。

您需要在VB中的匿名类型属性中添加Key标识符。(在c#中所有的属性都是键属性)只有键属性的值被比较,以确定两个实例是否相等,你需要这个Distinct()工作。

Select New With {
                 Key .Col1 = dr1.Field(Of Double)("Col1"),
                 Key .Col2 = dr2.Field(Of String)("Col2")
                }

关于让CopyToDataTable在匿名类型上工作,请查看此答案

相关内容

  • 没有找到相关文章

最新更新