我的应用程序中有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...
});
答案 0 :(得分: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 }
答案 1 :(得分:2)
在数据库解决方案之外,最好的办法是在执行后使用LINQ(对象)进行连接。
我意识到这不是你所希望的解决方案。至少在这个级别,您不必担心IN列表限制(.Contains)
编辑: 上面的数据库解决方案之外的实际上指向了链接服务器解决方案,您可以在其中允许来自上下文A的表/视图在上下文B中存在于数据库中。
答案 2 :(得分:0)
如果您无法将2个表提取到List对象中然后加入它们,那么您可能需要在数据库端执行某些操作。我建议在您可以控制的数据库服务器上创建链接服务器和视图。然后,您可以在视图中执行连接,并且您将拥有一个非常简单的LINQ查询来检索视图。我不确定LINQtoSQL如何在指向2个不同服务器的2个数据上下文之间进行连接。