如何在一个LINQ请求中使用两个不同的数据上下文?

任何人都可以帮助我:如何在一个LINQ请求中使用两个不同的数据上下文?

using (var db = new DataMapDataContext(Connection)) { using (var dbAdd = new DataMapDataContext(ConnectionAdd)) { return (from i in dbAdd.ITEMs join p in db.U_OTT_PINs on i.ITEMNO equals p.PIN_CODE where p.PIN_TYPE == Utils.PinItem select ... } } 

可能吗?

更新:

我解决了我的问题,但没有解决不同的数据上下文:

  var listPinnedItems = new List(); using (var db = new DataMapDataContext(Connection)) { listPinnedItems = (from lpi in db.U_OTT_PINs where lpi.PIN_TYPE == Utils.PinItem select lpi.PIN_CODE).ToList(); } using (var dbAdd = new DataMapDataContext(ConnectionAdd)) { return (from i in dbAdd.ITEMs where listPinnedItems.Contains(i.ITEMNO) ... 

我不相信 – 这两个不同的上下文可能涉及同一数据库中的不同事务,甚至可能涉及完全不同的数据库实例。 如何构建SQL来跨两个工作?

如果你能解释一下你想要做什么,我们可以帮助你。

我担心LINQ to SQL不适用于跨不同数据库的查询。 请参阅下面的可能解决方法?

http://social.msdn.microsoft.com/forums/en-US/linqprojectgeneral/thread/3a15002c-704d-49f9-a8cc-0d2bde186e1d

可以使用两个datacontexts,但不能同时跨两个数据库查询。 但是,您可以使用通用linq语句(linq2objects)获取两个查询中涉及的数据并查询对象。

如果没有先问“ 你想要达到什么目标? ”,这是其中一个不应该回答的问题。

datacontexts是指向同一个数据库还是指向不同的数据库?

如果它们连接到同一个数据库,并且您拥有两个的唯一原因是您已将实体分开,那么您只能使用一个DC来查询“属于”另一个datacontext的表。 只需使用GetTable,L2S将根据类和成员属性解析映射。

如果他们指向同一服务器上的不同数据库,并且您正在连接到其中一个数据库的登录,并且有权从第二个数据库中读取,则可以通过简单地添加来自基于另一个数据库的datacontext中的一个数据库中的表。数据库名称作为.dbml文件中的前缀。