簡體   English   中英

如何使用LINQ2SQL連接兩個不同上下文的表?

[英]How To Join Tables from Two Different Contexts with LINQ2SQL?

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

為什么?:我們正在使用SaaS產品來跟蹤我們的時間,項目等,並希望向此產品發送新的服務請求,以防止我們的團隊重復數據輸入。

上下文A:此數據庫存儲服務請求信息。 它是第三方數據庫,我們無法更改此數據庫的結構,因為它可能會在下游產生意外的不可支持的后果。

上下文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...
             });

您可以嘗試使用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 }

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

我意識到這不是你所希望的解決方案。 至少在這個級別,你不必擔心IN列表限制(.Contains)

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM