2010-01-20 5 views
0

내 상황은 내 테이블 중 하나에서 날짜가 null이 될 수없는 linq-to-sql 모델을 가지고 있기 때문입니다. 데이터베이스가 해당 필드에 널 (null)을 허용하지 않기 때.입니다. 내 문제는,이 모델로 Linq 쿼리를 작성하려고하면 날짜가 'nullable'필드가 아니기 때문에 더 이상 테이블에 왼쪽 조인을 할 수 없기 때문에 "Nothing"과 비교할 수 없다는 것입니다.Linq, 왼쪽 가입 날짜 및 날짜

예 : 이 동영상 테이블, {ID, MovieTitle가}이며, 상영 테이블, {ID, MovieID, ShowingTime, 위치} 나는 모든 사람을 반환하는 명령문을 작성하는 것을 시도하고 이제

상영되지 않는 영화.

Select m.* 
From Movies m Left Join Showings s On m.ID = s.MovieID 
Where s.ShowingTime is Null 

지금이 상황에서 내가 '위치'필드에 널 (null)을 테스트 할 수 있지만 내가 현실 (다만 간단한 예)이 무엇인지되지 않습니다 : T.SQL에서이 같을 것이다. 내가 가지고있는 것은 null이 아닌 날짜뿐입니다.

나는 Linq에에 쓰기를 시도하고있다 :

내가

말하는 오류를 얻고있다 그러나
From m In dbContext.Movies _ 
Group Join s In Showings on m.ID Equals s.MovieID into MovieShowings = Group _ 
From ms In MovieShowings.DefaultIfEmpty _ 
Where ms.ShowingTime is Nothing _ 
Select ms 

연산자는 유형 '날짜'의 피연산자를 허용하지 않는 '인가'. 피연산자는 참조 또는 Null 가능 유형이어야합니다.

이 문제가 발생합니까? 모델이 정확합니다. Showings : ShowTime 테이블에 null이 없어야합니다. 그러나 왼쪽 조인을하고 특정 영화에 대한 상영 시간이없는 경우 ShowTime은 그 영화에 대해 아무것도 표시해서는 안됩니다 ...

모두에게 감사드립니다.

+0

== 대신 ==를 사용해 보셨나요? is 연산자가 참조 유형을 비교하지 않습니까? – Jason

답변

2

왼쪽 결합을 사용하면 실제로 여기에 도움이되지 않습니다. 오른쪽 테이블에는 결과가 없기 때문에 왼쪽 테이블과 왼쪽 테이블 만 검색하면됩니다. 이/"하지 존재"질의 "가 아닌"간단 :

From m in dbContext.Movies _ 
Where Not dbContext.Showings.Any(Function(s) s.MovieID = m.MovieID) _ 
Select m 
0

상영 테이블에 레코드가없는 경우, 쿼리의 전체 개체가 아무 것도 없어야합니다. 이러한 시나리오 하에서는 날짜가 절대로 나오지 않아야합니다. 왼쪽 결탁은 다음과 같이 작성되어 표시가없는 영화 만 선택합니다.

Dim query = From m In dbContext.Movies _ 
      Group Join s In dbContext.Showing On m.ID Equals s.MovieID Into g = Group _ 
      From item In g.DefaultIfEmpty() _ 
      Where item Is Nothing _ 
      Select m