2011-10-18 5 views
2

일치하지 않는 문자열을 검색하는 데 nHibernate를 사용하고 있습니다.null 입력 가능 문자열 비교에 대한 필터링

모델은 이것이다 :

  • PlayerGroupExpectedPlaylistKey

  • Player이 필드 LastReportedPlaylistKey이있는 필드가 있습니다.

  • 하나의 PlayerGroup에는 많은 Players가 있습니다.

쿼리를 수행하여 그룹의 예상 재생 목록과 일치하지 않는 모든 플레이어를 찾고 싶습니다. 다음과 같이

내 코드입니다 : 내가 생성 된 SQL을 검토 한

PlayerGroup playerGroupAlias = null; 
Player playerAlias = null; 

var query = this.Session.QueryOver<Player>(() => playerAlias) 
         .JoinAlias(() => playerAlias.PlayerGroup,() => playerGroupAlias) 
         .Where(
           () => (playerGroupAlias.ExpectedPlaylistKey != playerAlias.CurrentlyReportedPlaylistKey) 
          ); 

, 그리고 절 곳이를 사용하고 :

WHERE not (playergrou1_.ExpectedPlaylistKey = this_.CurrentlyReportedPlaylistKey) 

불행하게도,이 값의 경우 한 다음이 NULL입니다 다른 값이 null이 아니더라도 false를 반환합니다.

문자열이 NULL이면 대소 문자를 처리하도록 어떻게 nHibernate 쿼리를 수정할 수 있습니까?

답변

0

나는 대답을 생각해 냈습니다.

그러나 문제의 단순성을 고려하면이 코드는 실제로 서투른 코드처럼 보입니다.

var query = this.Session.QueryOver<Player>(() => playerAlias) 
         .JoinAlias(() => playerAlias.PlayerGroup,() => playerGroupAlias) 
         .Where(
           () => (
             (playerAlias.CurrentlyReportedPlaylistKey == null) 
              && 
             (playerGroupAlias.ExpectedPlaylistKey != null) 
            ) 
             || 
             (
             (playerAlias.CurrentlyReportedPlaylistKey != null) 
              && 
             (playerGroupAlias.ExpectedPlaylistKey == null) 
            ) 
             || 
             (
             playerGroupAlias.ExpectedPlaylistKey != playerAlias.CurrentlyReportedPlaylistKey 
            ) 

            ); 

당신이 볼 수 있듯이, 나는 모두가 질문을, 람다 다섯 개 비교로 구성된 표현뿐만 아니라 다른 다섯 개 부울 연산에 의존 한 " 서로 다른이 두 개의 문자열은"?

더 좋은 해결책이 있기를 바랍니다.