2010-07-29 5 views
4

ORM으로 NHibernate를 사용하고 일부 데이터를 정렬하려고합니다. 데이터를 페이징해야합니다.NHibernate 정렬 (두 번째 옵션으로 SQL)

내 요청 테이블의 두 열은 UrgencyID 및 CreateDate입니다. UrgencyID는 정적 데이터가있는 긴급 테이블에 대한 FK입니다. 1 = 낮음, 2 = 보통, 3 = 높음, 4 = 위험.

다음과 같은 방법으로 요청을 주문해야합니다.

내림차순 CreateDate에 의해 다른 모든 요청을 내림차순 CreateDate하여 중요한 요청은 그래서 요청의 내 목록은 항상 CreateDate의 상단에 내림차순하고 다른 모든 요청 CreateDate 내림차순으로 (UrgencyID를 무시)

이인가하여 핵심해야 NHibernate (Criteria API 사용)에서이 정렬 순서를 수행 할 수 있습니까?

그렇지 않은 경우 SQL에서 어떻게 처리합니까? 저장 프로 시저에서?

편집 :이 같은 SQL 문자열의 this_ 접두사를 사용 @DanP 및 @Michael Pakhantsov

모두에 솔루션 덕분에 기본 테이블 선택의 기본 NHibernate에 접두사입니다.

public class OperatorJobQueueOrder : Order 
    { 
     public OperatorJobQueueOrder() : base("", true) { } 
     public override NHibernate.SqlCommand.SqlString ToSqlString(ICriteria criteria, ICriteriaQuery criteriaQuery) 
     { 
      return new NHibernate.SqlCommand.SqlString("case this_.JobRequestUrgencyID when 4 then 4 else 0 end desc, this_.CreatedDate"); 
     } 
    } 

답변

1
IN SQL ORDER BY will be 

    ORDER by case UrgencyId when 4 then 4 else 0 end, CreateDate desc 
+0

도움을 주셔서 감사합니다. 두 답변을 통해 결과를 얻을 수있었습니다 - 사용자 지정 NHibernate 정렬과 함께 제공 한 SQL을 사용하십시오. 부분적으로 질문에 대답하는 사람들에게 상을 수여 할 수 있습니까? –

+0

@Ciaran : 마이클이 먼저 대답했습니다. 당신은 그의 대답을 받아 들여야합니다. 당신이 우리의 답을 조합하여 사용한다면; 게시물을 편집하여 완벽한 솔루션을 포함시켜보십시오. – DanP

2

당신은 critiera API를 통해이 문제를 처리하기 위해 사용자 지정 정렬 순서를 만들 수 있습니다; 예제 구현에 대해서는 this question을 참조하십시오.

+0

도움 주셔서 감사합니다. –