我有两个表需要通过LINQ加入,但它们存在于不同的数据库中.现在我正在返回一个表的结果,然后循环并检索另一个表的结果,你可以猜测它并不是非常有效.有没有办法让它们成为一个LINQ语句?有没有其他方法来构建它以避免循环?我只是在寻找想法,万一我忽略了什么.
请注意,我无法更改数据库,即我无法在引用另一个的视图中创建视图.我还没有尝试过的东西是在引用两个表的第三个数据库中创建视图.欢迎任何想法.
Rya*_*ndy 40
你可以做到这一点,甚至可以跨越服务器,只要你可以从其他访问一个数据库.也就是说,如果可以针对ServerA编写SQL语句.访问ServerB的DatabaseA.DatabaseB.架构.TableWhatever,那么你可以在LINQ中做同样的事情.
为此,您需要手动编辑.dbml文件.您可以像这样轻松地在VS 2008中执行此操作:右键单击,选择打开方式...,然后选择XML编辑器.
查看Connection元素,它应该位于文件的顶部.您需要做的是为不在该连接字符串指向的数据库中的表提供显式数据库名称(和服务器名称,如果不同).
.dbml中Table元素的开始标记如下所示:
<Table Name="dbo.Customers" Member="Customers">
Run Code Online (Sandbox Code Playgroud)
您需要做的是,对于不在连接字符串数据库中的任何表,将Name属性更改为以下类似之一:
<Table Name="SomeOtherDatabase.dbo.Customers" Member="Customers">
<Table Name="SomeOtherServer.SomeOtherDatabase.dbo.Customers" Member="Customers">
Run Code Online (Sandbox Code Playgroud)
如果遇到问题,请确保可以从原始数据库(或服务器)真正访问其他数据库(或服务器).在SQL Server Management Studio中,尝试编写针对原始数据库运行的小型SQL语句,其执行以下操作:
SELECT SomeColumn
FROM OtherServer.OtherDatabase.dbo.SomeTable
Run Code Online (Sandbox Code Playgroud)
如果这不起作用,请确保您拥有可以访问具有相同密码的两个数据库的用户或登录.当然,它应该与.dbml的连接字符串中使用的相同.