2015-08-28 46 views
1

我试图加入来自不同服务器的两个表,但它不断抛出此异常:加入不同服务器上的两个表使用LINQ

此方法支持LINQ到实体基础设施,但不适合使用直接从您的代码。

这里是我的查询:

var myList = (from myTableA in _dbProvider.ContextOne.TableA 
       join myTableB in _dbProvider.ContextOne.TableB on myTableA.ProductId equals myTableB.Oid 
       join myTableC in _dbProvider.ContextTwo.TableC on myTableB.Id equals myTableC.ProductId 
       where 
       select myTableC.Name).Distinct().ToList(); 

那是什么意思, 知道我发现每个表分别将数据传输到列表中,然后加入他们的其他解决方案,但它来讲是非常贪婪时间 有没有其他解决方案?

+0

你可以显示你声明'_dbProvider'的位置吗? – user1666620

+0

如果您的数据太大而无法使用独立查询和Linq处理对象,则可以使用联合表创建可从一个上下文访问的远程表的“本地”副本。不过,我通常不喜欢这样连接数据库。 –

回答

1

您不能从两个不同的服务器连接两个表。绝对不是来自EF。 你最好的办法是只抓取两个单独列表中的数据,然后用Linq将它们连接在一起。

让我举一个想象的例子:您在一张桌子上有1000,000张发票,每张发票上有10个项目,在另一台服务器上共有10,000,000张发票细节。您需要在2015年5月4日创建的10个首发票的发票及其详细信息

您向第一个数据库发送查询,只获取这10个发票,提取他们的id s并使用它查询其他约100行服务器。这只比制作单个连接查询慢大约两倍。

在某些情况下,这变得不可能(你对这两张表都有条件),你需要带更多的行,但在简单的情况下,这是可能的。

+0

我的表格太重了,我无法从每个表格中获取所有数据,然后将它们从列表中加入! 我正在寻找最佳解决方案 – user3708197

+0

查看答案的更新。 – Alireza

+0

我看到你在这里做了什么,在非复杂查询的情况下,这是一个很好的解决方案,在我的情况下,我无法做到这一点,无论如何,谢谢你,但是这里有人发现它我叮叮当当: http:// stackoverflow。 com/questions/6256790/linq-join-mysql-and-sql-server-tables?rq = 1 – user3708197

相关问题