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))}
상관 통찰력 감상 할 수있다. 나는 그물 주위의 샘플을 보았다. 그리고 그들 모두는 나의 것과 똑같은 것처럼 보인다.
브릴리언트 그래픽. 챔피언처럼 작동합니다. 첫 번째 쿼리에 .ToList()가없는 경우 왜 작동하지 않는지 생각하십시오. – zhx
LINQ to SQL은 후기 바인딩이기 때문에 데이터를 가져 오기위한 SQL 호출은 가능한 한 지연됩니다. 첫 번째 쿼리를 반복 할 경우 호출을하지만 그 때까지는 "필요할 때까지"보류됩니다. ToList()는 반복을 강제 실행하고 해당 호출을 수행합니다. 흥미로운 점은 두 번째 쿼리가 첫 번째 쿼리를 반복하지 않지만 이제는 그 이유를 알 수 있다는 것입니다. –
굉장합니다. 설명해 주셔서 감사합니다. 이제 이해가된다 :-) – zhx