2011-08-11 46 views
4

我有這個疑問:LINQ表達

var list = (from t1 in context1.SomeTable 
      join t2 in context2.SomeTable on t1.ID equals t2.ID 
      where //some where clause 
      select new { t1.SomeField, t2.SomeField }).ToList()); 

當這個查詢試圖執行我會得到這個錯誤:

指定的LINQ表達式包含對與不同上下文關聯的查詢的引用。

  1. 這是爲什麼不允許與LINQ to Entities
  2. LINQ to Entities還有可能嗎?
  3. 這是一個什麼工作?
+0

你能否請你用僞代碼解釋你將如何執行查詢?服務器上應該發生什麼以及代碼中本地會發生什麼? – Tormod

+0

在我的情況下,我剛剛在我的數據庫中分割了我的表格,在SystemContext中分割了我的系統表格,在ApplicationContext中分離了我的其餘表格。所以它仍然在同一臺服務器上,同一連接上,只有兩個不同的實體模型。 – Willem

+0

所以你把它們放在兩個不同的上下文中,但你認爲系統應該認識到上下文是相同的?你期望整個查詢運行服務器端嗎?如果是這樣,我假設你應該有相同的上下文中包含所有查詢相關的表。 – Tormod

回答

6

我想象這是因爲你正在構建的語句被轉換爲SQL後臺並在數據庫上運行。由於不同的上下文可能來自不同的數據庫或甚至不同的服務器,因此無法保證在查詢服務器時context2中的數據可用於context1。

您可以從每個上下文中返回數據並轉換爲IEnumerable,然後執行標準的linq查詢,但是您已經清楚了數據傳輸和數據庫引擎執行的內存中處理的開銷。