2010-08-13 54 views
0

使用LINQ2SQL當我得到這個錯誤:兩個LINQ數據環境問題

The query contains references to items defined on a different data context. 

下面的代碼:

var instances = (from i in context.List 
        join j in context.CatsList on i.ListID equals j.ListID 
        join c in context.Cats on j.CatID equals c.CatID 
        where c.SID == Current.SID 
        orderby i.Title 
        select i).Distinct(); 

的問題,據我可以確定,就是Current對象實際上是從執行不同LINQ語句的屬性返回的LINQ2SQL對象。

因此,LINQ2SQL不喜歡在一個LINQ語句包含另一個語句結果的數據庫上執行查詢。

我的那個問題是,(我將在這裏總結一下這個問題)的Current對象被檢索使用上述相同的上下文中查詢並最終Current.SID應該簡單地解析爲int,那麼究竟是什麼編譯器執行它的問題?

簡而言之,爲什麼不可能使用先前查詢的返回對象作爲參數執行LINQ查詢?

回答

0

這是問題,而不是你的最後一個問題的直接回答一個解決方案,但你也許可以與獲得方式:

var sid = Current.SID; 
var instances = (from i in context.List 
       join j in context.CatsList on i.ListID equals j.ListID 
       join c in context.Cats on j.CatID equals c.CatID 
       where c.SID == sid 
       orderby i.Title 
       select i).Distinct(); 
+0

是的,這就是我的想法。這是我在撰寫原始問題時的第一次調查。但不,我得到同樣的錯誤。據我所知,查詢中涉及的唯一元素是i,j和c - 全部來自一個上下文。那麼它真的在抱怨什麼? – 2010-08-13 15:12:46

+0

如果換出'=='的'equals',它會起作用嗎? – kbrimington 2010-08-13 15:24:42

+0

不,編譯器錯誤狀態「Expected contextual keyword'等於'」和「名稱'j'不在'equals'左側的範圍內,請考慮交換'equals'兩邊的表達式。 – 2010-08-13 15:26:41