假設我有以下2個數據表:DataTable的錯誤 - 無法CopyToDataTable()
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
而且我要創建基於兩個不同給予值之間的聯接第三DataTable中的一個簡單的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
但我getti納克不同的錯誤的主機,無論我怎麼努力...
我的第一個錯誤是,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
它運行,但它不會將結果篩選到唯一列表中 - 它將從Table1
中留下所有col1
值。
我想了解Linq,但我明顯錯過了一些東西 - 有人請向我解釋這是怎麼回事,以及如何解決這個問題?
作爲補充到@Magnus的解決方案,任何人誰在將來遇到這樣那樣的問題,該CopyToDataTable
方法匿名類型的IEnumerable(如馬格努斯指出的是什麼,我給了這個問題)可以找到here及其實現here。
謝謝! - 重複被帶回來的第一個問題是用'Key'標識符來解決的,但是我仍然無法獲得'CopyToDataTable'去工作...... :( –
'CopyToDataTable()'只能用於'IEnumerable(of DataRow )'並且你有一個匿名類型的IEnumerable。 – Magnus
再一次,@Magnus,THANKS !! - 這很有道理......讓我感到困惑的是MSDN文檔,如下所示:http://msdn.microsoft.com/en -us/library/bb386921.aspx - 他們如何設法在第三個例子中做到這一點? - 我錯過了什麼嗎? –