2010-07-01 56 views
3

我有兩個表,訂閱和主題。每個訂閱都與特定的TopicID(主題表的PK)相關。第一個查詢工作正常,並檢索今天上傳的所有視頻的topicID。Linq to SQL where子句原因對象未設置爲對象的實例

當我嘗試然後使用查詢1的結果作爲查詢2的where-in子句時,會出現問題。我一直在接收未設置爲對象實例的對象引用。

查詢1

IQueryable<int> topics = (from t in dataLayer.Videos 
        where SqlMethods.DateDiffDay(t.DateCreated, DateTime.Today) == 0 
       select t.TopicID).Distinct(); 

查詢2(失敗)

IQueryable<Subscription> subs = from s in dataLayer.Subscriptions 
            where topics.Contains(s.TopicID) 
            select s; 

失敗時生成LINQ查詢是{Table(Subscription).Where(s => value(EmailSubscribers+<>c__DisplayClass0).topics.Contains(s.TopicID))}

任何深入瞭解這將不勝感激。我看過網上的一些樣品,它們看起來都和我的相同。

回答

2

您可能需要ToList()您的第一個查詢,以便它肯定執行。

+1

輝煌的Graphain。像冠軍一樣工作。任何想法爲什麼它不起作用,如果第一個查詢沒有.ToList()? – zhx 2010-07-01 01:41:55

+0

由於LINQ to SQL是後期綁定 - 獲取數據的SQL調用會盡可能延遲。如果你要遍歷第一個查詢,它會進行調用,但在此之前它會一直持續下去,直到你「需要」爲止。 ToList()強制迭代並進行該調用。有趣的是,第二個查詢不會遍歷第一個查詢,但現在您知道原因了。 – 2010-07-01 01:53:54

+1

太棒了。謝謝你的解釋。我現在明白了:-) – zhx 2010-07-01 01:59:17

相關問題