2010-07-06 70 views
2

我在VB.NET LINQ中有這個具有挑戰性的任務。 我有來自不同服務器的2個數據庫。我無法鏈接數據庫。該數據是從數據庫檢索爲:VB.NET LINQ加入

  • DB1

  • CLIENT_ID Engagement_ID說明已啓用

  • 600 10真公司1
  • 600 20假Company2的
  • 700 10 True Company3
  • DB2
  • CLIENT_ID Engagement_ID說明已啓用
  • 600 5真公司1
  • 600 10假Company2的
  • 500 30真公司3

在前端我需要添加的接合存在於DB1中但不在DB2中的客戶端。我使用API​​調用來添加約定,因爲我無法更新數據庫。 在這個例子中,我需要將DB1的第二條記錄添加到DB2,因爲客戶端ID 600存在於DB2中,並且客戶端ID 600的參與ID 20在DB2中不存在。由於DB2中不存在客戶端ID 700,因此無法將DB1的第三條記錄添加到DB2。 我需要LINQ查詢來返回記錄,其中DB1.client_id = DB2.Client_ID和DB1.Engagement_ID <> DB2.Engagement_ID。如果LINQ查詢返回數據表或某些數據結構中的記錄,我可以遍歷記錄並進行api調用,並將客戶端ID,參與ID,啓用和描述作爲參數傳遞給DB2。 請幫我解決這個問題。我試圖做到這一點,但LINQ允許equijoins,我無法讓它適用於DB1.client_id = DB2.Client_ID和DB1.Engagement_ID <> DB2.Engagement_ID。

的T SQL這個任務是:

select * from DB1 
left join DB2 on DB1.client_ID = DB2.client_ID 
and DB1.Engagement_ID = DB2.Engagement_ID 
where DB2.CLient_ID is null and DB2.Engagement_ID is null 
and DB1.client_id in (select client_id from DB2) 

我想這件T SQL轉換爲LINQ

在此先感謝

+0

同一個用戶在同一問題:http://stackoverflow.com/questio ns/3189631/linq-to-objects/3190037#3190037 – spong 2010-07-06 21:21:00

+0

我改述了這個問題,並再次發佈在http://stackoverflow.com/questions/3189631/linq-to-objects/3190037#3190037得到更好的答案 – 2010-07-07 14:28:07

回答

1

您可以添加第二個連接標準爲Where子句:

Dim q = From e1 In db1 
     Join e2 In db2 On e1.Client_ID Equals e2.Client_ID 
     Where e1.Engagement_ID <> e2.Engagement_ID 
     Select e1, e2 
+0

謝謝回覆。我以前嘗試過,但它不起作用。 我將張貼TSQL此任務: SELECT * FROM DB1 左連接上DB1.client_ID = DB2.client_ID 和DB1.Engagement_ID = DB2.Engagement_ID DB2哪裏DB2.CLient_ID是零和DB2.Engagement_ID爲空 和DB1。client_id in(從DB2中選擇client_id) 我試圖將此T SQL轉換爲LINQ – 2010-07-06 17:24:39

+0

這給出了錯誤的結果。例如,如果e1具有密鑰cid1和eid1,而e2具有密鑰cid2和eid2,則這將返回結果,實際上,@nithin正在查找cid1存在於e2中而不是cid1和eid1的情況。 – Hogan 2010-07-06 21:22:00