2010-03-24 58 views
4

我在我的應用程序(不同的數據庫)中有2個數據上下文,並且需要能夠在上下文B中使用右上連接來查詢上下文A中的表。如何在LINQ2SQL中執行此操作?如何使用LINQ2SQL從兩個不同的上下文連接表?

爲什麼?:我們正在使用SaaS的產品跟蹤我們的時間,項目等,並希望新的服務請求發送到該產品,以防止我們的團隊從重複數據輸入。

上下文A:該db存儲服務請求信息。它是第三方數據庫,我們無法對此數據庫的結構進行更改,因爲它可能會在下游產生意想不到的不可支持的後果。

上下文B:該數據存儲已處理的服務請求的「日誌」數據。我和我的團隊可以完全控制此數據庫的結構等。未處理的服務請求應該進入該數據庫,而另一個進程會將其標識爲未處理,並將記錄發送到SaaS產品。

這是我正在修改的查詢。我能夠做一個!list.Contains(c.swHDCaseId)最初,但這不能處理超過2100個項目。有沒有辦法將連接添加到其他上下文?

var query = (from c in contextA.Cases 
      where monitoredInboxList.Contains(c.INBOXES.inboxName) 
      //right join d in contextB.CaseLog on d.ID = c.ID.... 
      select new 
      { 
       //setup fields here... 
      }); 

回答

2

在數據庫解決方案之外,最好的辦法是在執行後使用LINQ(對象)進行連接。

我意識到這不是你所希望的解決方案。至少在這個層面上,你會不會擔心IN列表限制(。載)

編輯: 以外的數據庫解決方案的上面真的指向鏈接服務器的解決方案,你允許從表/視圖上下文A存在於上下文B的數據庫中。

5

您可以嘗試使用GetTable命令。我認爲這會加載所有contextB.TableB的數據,但不是100%確定。我沒有設置爲在玩耍或測試了這一點,所以讓我知道,如果它的環境=)

from a in contextA.TableA 
join b in contextB.GetTable<TableB>() on a.id equals b.id 
select new { a, b } 
+0

我不太確定爲什麼這是upvoted。 GetTable 是複數對象屬性背後的底層調用(即在這種情況下的TableBs)。如果您直接致電屬性,這將不再有效。 – Marc 2010-03-24 18:30:00

0

如果您不能提取2個表到列表對象,然後加入他們的行列,那麼你將可能要做一些數據庫方面的事情。我會建議在您控制的數據庫服務器上創建鏈接服務器和視圖。然後您可以在視圖中進行連接,並且您將擁有一個非常簡單的LINQ查詢來檢索視圖。我無法確定LINQtoSQL如何在兩個指向兩個不同服務器的數據上下文之間進行連接。

相關問題