跨多个数据库的LINQ

我有两个需要通过LINQ连接的表,但他们住在不同的数据库中。 现在,我返回一个表的结果,然后循环和检索另一个的结果,正如你可以猜到的是不是非常有效。 有什么办法让他们进入一个单一的LINQ声明? 有没有其他方法来构build这个避免循环? 我只是在寻找想法,以防万一我忽略了一些东西。

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

可以做到这一点,即使是跨服务器,只要你可以从另一个数据库访问一个数据库。 也就是说,如果可以写一个针对ServerA的SQL语句。 访问ServerB的 DatabaseADatabaseB架构TableWhatever ,那么你可以在LINQ中做同样的事情。

要做到这一点,你需要手工编辑.dbml文件。 你可以像这样轻松地在VS 2008中做到这一点:右键单击,select打开方式… ,然后selectXML编辑器

看看Connection元素,它应该在文件的顶部。 你需要做的是为不在该连接string指向的数据库中的表提供一个明确的数据库名(和服务器名,如果不同的话)。

.dbml中表格元素的开始标记如下所示:

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

你需要做的是,对于任何不在连接string数据库中的表,将Name属性更改为如下之一:

 <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 

如果不起作用,请确保您拥有一个用户或login权限,并使用相同的密码访问这两个数据库。 它当然应该和你的.dbml连接string中使用的一样。

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

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