如何使用LINQ2SQL连接两个不同上下文的表?

我的应用程序中有2个数据上下文(不同的数据库),并且需要能够在上下文中查询上下文中的表,并在上下文中的表上使用右连接。如何在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... }); 

在数据库解决方案之外,最好的办法是在执行后使用LINQ(对象)进行连接。

我意识到这不是你所希望的解决方案。 至少在这个级别,你不必担心IN列表限制(.Contains)

编辑:上面的数据库解决方案之外真正指向链接的服务器解决方案,其中允许来自上下文A的表/视图从上下文B存在于数据库中。

你可以尝试使用GetTable命令。 我认为这首先会加载所有contextB.TableB的数据,但不是100%肯定。 我没有设置环境或测试这个,所以让我知道它是否有效=)

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

如果你不能将2个表提取到List对象然后加入它们那么你可能需要做一些数据库方面的事情。 我建议在您控制的数据库服务器上创建链接服务器和视图。 然后,您可以在视图中执行连接,并且您将拥有一个非常简单的LINQ查询来检索视图。 我不确定LINQtoSQL如何在指向2个不同服务器的2个数据上下文之间进行连接。