2010-07-01 2 views
3

두 개의 테이블, 가입 및 주제가 있습니다. 각 구독은 특정 TopicID (주제 테이블의 PK)와 관련됩니다. 첫 번째 쿼리는 올바르게 작동하고 오늘 업로드 된 모든 동영상의 topicID를 검색합니다.Linq to SQL where 절이 객체의 인스턴스로 설정되지 않음

쿼리 2의 where-in 절로 query1의 결과를 사용하면 문제가 발생합니다. 개체 참조가 개체 인스턴스로 설정되지 않고 계속 수신됩니다.

쿼리 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

브릴리언트 그래픽. 챔피언처럼 작동합니다. 첫 번째 쿼리에 .ToList()가없는 경우 왜 작동하지 않는지 생각하십시오. – zhx

+0

LINQ to SQL은 후기 바인딩이기 때문에 데이터를 가져 오기위한 SQL 호출은 가능한 한 지연됩니다. 첫 번째 쿼리를 반복 할 경우 호출을하지만 그 때까지는 "필요할 때까지"보류됩니다. ToList()는 반복을 강제 실행하고 해당 호출을 수행합니다. 흥미로운 점은 두 번째 쿼리가 첫 번째 쿼리를 반복하지 않지만 이제는 그 이유를 알 수 있다는 것입니다. –

+1

굉장합니다. 설명해 주셔서 감사합니다. 이제 이해가된다 :-) – zhx

관련 문제