我有两个完全独立的数据库上的相关数据,我需要来自这两个数据库的信息。其中一个数据库位于MySql服务器上,另一个位于MS SQL Server上。不要问为什么我们有两台完全不同的服务器上的相关数据,这是一个漫长的故事。LINQ:加入MySql和SQL Server表
从高层次的角度来看,我需要加入MySqlTableA到SQLServerTableB,做一些复杂的限制,可能做一些分组依据和计数。
我试图找到一种方法使这两个数据库之间的连接相当容易。据我所知,我认为LINQ可能会解决我的问题,但我无法创建同时具有MySql和SQL Server源的单个上下文。我可以将这两个源放在不同的上下文中 - 使用Devart的LinqConnect创建MySql上下文 - 但LINQ不允许跨上下文连接。 (我试过这里描述的方法,但它不起作用:Simulating Cross Context Joins--LINQ/C#)
那么我的选择是什么?有没有办法在这两个不同的数据库服务器上有效地连接表(不管是LINQ还是其他),还是我将不得不循环并手动加入数据?
编辑:
如前所述,我已经试过了AsQueryable已()的解决方法,但我仍然获得了跨语境例外。这里是我的代码:
public static MySqlDataContext mysql = new MySqlDataContext();
public static SQLDataContext sql = new SQLDataContext();
public static void Main() {
var rows = from a in mysql.tableA
join b in GetTableBs() on a.col equals b.col
select a;
//exception gets thrown when rows is enumerated.
//InvalidOperationException: "The query contains references to items defined on a different data context."
foreach(var row in rows) {
...
}
}
public static IEnumerable<TableB> {
return sql.TableBs.AsQueryable();
}
我已经为我的问题添加了一个编辑,以显示我尝试过的代码,与您的代码非常相似。恐怕我无法给您发送整个示例项目,因为它会包含敏感信息。然而,我上面添加的代码示例应该清楚我在做什么。 – ean5533 2011-06-07 12:32:02
@ ean5533,我已经更新了答案。 – Devart 2011-06-07 13:26:53
啊哈,我们走吧。我知道必须有某种方式才能在内存中进行连接。我没有意识到.ToList()函数会给我一个仍然可以像LINQ表一样处理的对象。这给了我所需要的,谢谢。 – ean5533 2011-06-07 13:42:17