2017-05-31 39 views
0

我試圖使用LINQ內連接兩個DataTable和返回具有從所有列兩個數據表LINQ的 - 加入2個表和選擇所有列VB.Net

Dim qryResult = (From qryAllItemsAllFields In dtAllItemsAllFields 
       Join qryGetAttributes In dtGetAttributes On qryGetAttributes.Field(Of String)("ITNBR") Equals qryAllItemsAllFields.Field(Of String)("itemnum") 
       Select New With {qryGetAttributes, qryAllItemsAllFields}).ToList() 

這樣做的結果的結果查詢永遠不會返回任何結果(我檢查了這個連接的結果應該返回結果)。我對linq很新,所以任何指導都會很感激。

更新:我一直在關注着,發現由代碼生成的列表的項目數爲6000(所以它產生的結果),但是當我嘗試到列表綁定到一個GridView它拋出一個錯誤說: ID爲'gvTest'的GridView的數據源沒有任何屬性或屬性可以從中生成列。確保您的數據源包含內容。

+0

嘗試顛倒「Equals」兩側的項目。我相信訂單很重要。 –

+0

忽略我上面所說的。這並不重要。但你怎麼使用qryResult。它將是一個具有兩個屬性的對象集合,每個對象都是一個DataRow。 GridView只需要一組DataRows。 –

+0

我只是試圖使用qryResult作爲gridview的數據源,但我猜測這不是它的方式 – CouldUseAHand

回答

0

使用一些相當重的反射代碼,可以將匿名對象轉換爲Dictionarys,然後將它們合併,或將它們轉換爲ExpandoObject並將它們合併。這可以防止處理大量的字段,並提供像LINQ缺失的SQL *通配符,但我不知道我會推薦它用於生產。

Dim qryResult = (From qryAllItemsAllFields In dtAllItemsAllFields 
       Join qryGetAttributes In dtGetAttributes On qryGetAttributes.Field(Of String)("ITNBR") Equals qryAllItemsAllFields.Field(Of String)("itemnum") 
       Select qryGetAttributes.ToExpando().AddAnon(qryAllItemsAllFields)).ToList() 

我的擴展C#編寫的,但由上述的結果是一個與ExpandoObject來自兩個源對象中的所有字段變平,這可能是可以接受的一個GridView