LINQ跨多个数据库

时间:2008-12-09 14:43:26

标签: linq linq-to-sql

我有两个表需要通过LINQ加入,但它们存在于不同的数据库中。现在我正在返回一个表的结果,然后循环并检索另一个表的结果,你可以猜测它并不是非常有效。有没有办法让它们成为一个LINQ语句?有没有其他方法来构建它以避免循环?我只是在寻找想法,万一我忽略了什么。

请注意,我无法更改数据库,即我无法在引用另一个数据库的视图中创建视图。我还没有尝试过的东西是在引用两个表的第三个数据库中创建视图。欢迎任何想法。

3 个答案:

答案 0 :(得分:40)

只要您可以从另一个数据库访问一个数据库,即使跨服务器也可以执行此操作。也就是说,如果可以针对访问 ServerB ServerA DatabaseA 编写SQL语句。 DatabaseB 。< em> schema 。 TableWhatever ,那么你可以在LINQ中做同样的事情。

要做到这一点,您需要手动编辑.dbml文件。您可以在VS 2008中轻松完成此操作:右键单击,选择打开方式... ,然后选择 XML编辑器

查看连接元素,该元素应位于文件的顶部。您需要做的是为不在该连接字符串指向的数据库中的表提供显式数据库名称(和服务器名称,如果不同)。

.dbml中元素的开头标记如下所示:

<Table Name="dbo.Customers" Member="Customers">

您需要做的是,对于连接字符串数据库中的任何表,将名称属性更改为以下类似之一:

<Table Name="SomeOtherDatabase.dbo.Customers" Member="Customers">
<Table Name="SomeOtherServer.SomeOtherDatabase.dbo.Customers" Member="Customers">

如果遇到问题,请确保可以从原始数据库(或服务器)真正访问其他数据库(或服务器)。在SQL Server Management Studio中,尝试编写针对原始数据库运行的小型SQL语句,其执行以下操作:

SELECT SomeColumn
FROM OtherServer.OtherDatabase.dbo.SomeTable

如果 不起作用,请确保您拥有可以访问具有相同密码的两个数据库的用户或登录名。当然,它应该与.dbml的连接字符串中使用的相同。

答案 1 :(得分:6)

在数据库中创建一个proc / view。

答案 2 :(得分:0)

鉴于你的条件,我认为你不能在一个Linq声明中这样做。但是,您可以将L2S查询的结果加入到Linq to Objects查询中。