2012-11-07 114 views
0

我想知道是否有人可以幫助我。 我是LINQ的新手,仍然試圖理解它如何融合在一起。LinQ - 左連接兩個數據表

我在SQL中有一個簡單的左連接查詢,返回表1中不存在的所有事務。這兩個表的結構都是相同的。

SELECT Table1.* 
FROM Table1 LEFT JOIN Table2 ON Table1.DealReference = Table2.DealReference 
WHERE (((Table2.DealReference) Is Null)); 

有人可以請指導我,如何在LinQ中實現相同。

我使用下面的數據表:

Dim currentDataTable = _DataTable1.AsEnumerable 
    Dim previousDataTable = _DataTable2.AsEnumerable 

我期待有結果輸出回一個數據表。

由於

BM

+1

你可以閱讀:http://stackoverflow.com/questions/267488/linq-to-sql-multiple-left-outer-joins。 – Nianios

回答

0

1)Linq-To-DataTableLinq-To-Objects一個子集,並假設數據是已經在存儲器中。所以如果你想要一個可擴展的解決方案,你可能想看看Linq-To-Sql,它直接查詢數據庫。

2)您的連接不是簡單的左連接,而是左外連接。你可以做到這一點,例如與此查詢:

Dim rows = From r1 In _DataTable1 
      Group Join r2 In _DataTable2 
      On r1.Field(Of String)("DealReference") Equals r2.Field(Of String)("DealReference") 
      Into DataGroup = Group 
      From row In DataGroup.DefaultIfEmpty 
      Where row Is Nothing 
      Select r1 
Dim tblresult = rows.CopyToDataTable() 
+0

嘿,謝謝你的回覆。這兩個DataTable已經被填充並且在內存中,所以這個解決方案看起來相關。但是,在遍歷代碼的過程中,我在循環幾次之後在以下部分發生錯誤。 Where row.IsNull(「DealReference」)表1有3個交易「Brian1」,「Brian2」和「Brian3」。表2有2個交易。 「Brian1」和「Brian2」。它看起來像是在它進入第三個條目時掉下來的。 – Brian

+0

@Brian:編輯我的答案。 '哪裏不行'應該工作。 –

+0

仍然出現錯誤「未將對象引用設置爲對象的實例。」 – Brian