2008-12-09 43 views
35

我有兩個需要通過LINQ連接的表,但他們生活在不同的數據庫中。現在我返回一個表的結果,然後循環並檢索另一個表的結果,正如你可以猜到的那樣,結果並不是非常有效。有什麼辦法讓他們進入單一的LINQ聲明?有沒有其他的方法來構建這個以避免循環?我只是在尋找想法,以防我忽視某些事情。跨多個數據庫的LINQ

請注意,我無法更改數據庫,即無法在引用其他數據庫的視圖中創建視圖。我還沒有嘗試過的事情是在引用兩個表的第三個數據庫中創建視圖。任何想法歡迎。

+0

爲什麼不能更改數據庫? – tuinstoel 2008-12-09 14:59:31

+0

第三方。 DBA希望遠離創建對象,即使它是一個簡單的視圖。 – gfrizzle 2008-12-09 15:01:53

回答

39

可以這樣做,即使是跨服務器,只要你可以從另一個數據庫訪問一個數據庫。也就是說,如果可以針對ServerA編寫SQL語句。 DatabaseA訪問ServerBDatabaseB模式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連接字符串中使用的一樣。

6

在您的數據庫中創建一個proc/view。

0

鑑於你的條件,我認爲你不能在一個Linq聲明中這樣做。但是,您可以將L2S查詢的結果加入到Linq to Objects查詢中。