1

저는 아주 간단한 데이터베이스를 매핑하기 위해 Fluent NHibernate를 사용하고 있습니다. 다음과 같은 상황에 문제가 있습니다. 의 내 클래스는 내가 기록 당 표시 JQuery와 datatables, 함께 일하고 있어요 Fluent NHibernate QueryOver : orderby null 참조 테이블을 피하시오.

ClassA 
------- 
... 
string A_Name; 
ClassB InnerObject; <- can be 'null' in the code, 
          because not every A record has a matching B record 


ClassB 
------- 
... 
string B_Name; 

과 같이/ A_NameInnerObject.B_Name을 행 보이는 가정 해 봅시다. 이 모든 것은 단순히 데이터에 액세스하기위한 것입니다. InnerObjectnull 일 경우 수동으로 테스트 할 수 있습니다. 그렇다면 빈 문자열 값만 표시하십시오. 이것은 효과적이고 좋습니다.

내가 겪고있는 문제는 해당 열을 정렬하는 올바른 구문을 사용하는 방법입니다.

if (sort on innerObject's B_Name) 
    { 
     query.OrderBy(() => innerObjectAlias.B_Name).Asc(); 
    } 

내가 내 매핑이 제대로 여기에 문제가 내가 '할 수 있어야한다는 것을 설정하고있다 확신한다 : 사용자가 정렬 할 컬럼에 따라 , 나는 이런 식으로 뭔가를 innerObjectnull 인 경우 정렬을 건너 뛰거나 수정하십시오. (I 유창함 NHibernate에 결코 실제로 별명 오른쪽에 값을 할당 생각하기 때문에?)

그래서 이런 식으로 뭔가가 작동하지 않습니다 분명히 좋은,하지만 것 :

if (sort on innerObject's B_Name AND innerObjectAlias != null) 
    { 
     query.OrderBy(() => innerObjectAlias.B_Name).Asc(); 
    } 

어떤 도움을 주시면 감사하겠습니다.

답변

1

이 null 가능성 확인이 가능합니다. 하지만 주문을 추가 할 곳이 아닙니다 (ORDER BY). association (JOIN)을 생성 할 때 수정해야합니다. 대신이의 :

// instead of this 
// resulting in INNER JOIN 
query.JoinAlias(root => root.InnerObject,() => innerObjectAlias); 

// we must use this 
query.JoinAlias(root => root.InnerObject,() => innerObjectAlias 
       , JoinType.LeftOuterJoin); 

// which will result in LEFT OUTER JOIN 

그런 다음,도이 사항이 부분적으로 기존 열

query 
    .OrderBy(() => innerObjectAlias.B_Name) 
     .Asc 
    ... 

참고으로 분류, 올바른 행을 반환합니다 : 우리는 약간의 투사로 주문할 수 있습니다 NULL 행의 배치를 구동 할 경우, 언급 한 마술 같은 것 here