使用linq连接来自不同服务器的两个表

时间:2015-08-28 13:21:44

标签: c# mysql sql-server linq

我正在尝试从不同的服务器加入两个表,但它一直在抛出这个异常:

  

此方法支持LINQ to Entities基础结构,不能直接在您的代码中使用。

这是我的查询:

 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();
这是什么意思?, 知道我找到了另一个解决方案,将数据从每个表中分别存入列表然后加入它们但是它在时间上非常贪婪 还有其他解决方案吗?

1 个答案:

答案 0 :(得分:1)

您无法从两个不同的服务器加入两个表。绝对不是来自EF。 最好的办法是只在两个单独的列表中获取数据,然后使用Linq将它们连接到对象。

让我举一个想象的例子:您在一张桌子上有1000,000张发票,每张发票大约有10件,其他服务器上的发票详细信息总计为10,000,000张。您需要发票及其详细信息,以便在2015-5-4上创建10个第一张发票

您向第一个数据库发送查询,只获取该10个发票,提取其id并使用该查询从另一个服务器查询大约100行。这只比进行单个连接查询慢两倍。

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