如何使用LINQ2SQL从两个不同的上下文中加入表?

4
我在应用程序中有两个数据上下文(不同的数据库),需要能够在上下文A中对表进行右连接,连接的表位于上下文B中。如何在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...
             });
3个回答

5

你可以尝试使用GetTable命令。我认为这会先加载所有contextB.TableB的数据,但不确定。我没有设置环境来测试,如果可行请告诉我 =)

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

我不太确定为什么这个被点赞了。GetTable<type>是复数对象属性(例如,在这种情况下是TableBs)背后的基础调用。这与直接调用属性一样行不通。 - Marc

2

除了数据库解决方案外,您最好在执行后使用LINQ(对对象)进行连接。

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

编辑: 上面的除了数据库解决方案实际上指的是链接服务器解决方案,其中您允许来自上下文A的表/视图存在于上下文B的数据库中。


0

如果您无法将这两个表提取为列表对象并将它们连接起来,那么您可能需要在数据库端进行一些操作。我建议在您控制的DB服务器上创建一个链接服务器和视图。然后您可以在视图中执行连接操作,并且只需检索视图即可使用非常简单的LINQ查询。我不确定LINQtoSQL如何能够在指向2个不同服务器的2个数据上下文之间执行连接操作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接