2011-12-09 4 views
1

Client와 AccountPlan의 엔티티가 1에서 0..1 사이입니다. 나는 내 고객을 가져오고 싶습니다. 먼저 고객이 AccountPlan을 가지고 주문한 다음 고객이 주문하지 않습니다. 내가 NHibernate에 쿼리에 다음 Linq를하려고하면.부울 조건으로 정렬하는 NHibernate 쿼리를 구성하십시오.

{ "예외 유형의 'Antlr.Runtime.NoViableAltException'이 던져졌다 [:

 return NHibernateSession.Current.Query<Client>() 
      .Where(x => x.SalesRepId == id) 
      .OrderBy(x => x.AccountPlan == null); 

을 나는 다음과 같은 메시지가있는 QuerySyntaxException를 얻을. OrderBy (.) (NHibernate.Linq.NhQueryable`1 [FIS.AccountManagement.Core.Domain.Client], 견적 ((x,) => (Equal (x.SalesRepId, p1))),), 인용문 (x) => (Equal (x.AccountPlan,))) "}

그 중요한 경우 10

여기에 두 엔티티 사이의 매핑 관계는 다음과 같습니다

는 는
public ClientMap() 
    { 
     HasOne(x => x.AccountPlan).PropertyRef(r => r.Client); 
    } 


    public AccountPlanMap() 
    { 
     DynamicInsert(); 

     References(x => x.Client, "EntityID"); 
    } 

사람은 내가 원하는 것을 달성 할 것이다 NHibernate에의 수많은 API 중 하나에서 쿼리를 알고 있나요? 미리 감사드립니다. 하나 명의 왕복에

답변

1

두 쿼리는 해결 방법으로 함께

var clientsWithPlan = NHibernateSession.Current.Query<Client>() 
    .Where(x => x.SalesRepId == id) 
    .Where(x => x.AccountPlan != null) 
    .Future(); 

var clientsWithoutPlan = NHibernateSession.Current.Query<Client>() 
    .Where(x => x.SalesRepId == id) 
    .Where(x => x.AccountPlan == null) 
    .Future(); 

return clientsWithPlan.Concat(clientsWithoutPlan); 
+0

독창적입니다. 고맙습니다! – Vish

0

concated, 당신은 정렬되지 않은 데이터베이스에서 모든 클라이언트를 검색 할 수 있습니다, 다음 개체에 LINQ를 사용하여 응용 프로그램의 순서를 수행

var clients = NHibernateSession.Current.QueryOver<Client>() 
    .Where(x => x.SalesRepId == id) 
    .Fetch(x => x.Account).Eager 
    .List(); 

return clients.OrderBy(x => x.AccountPlan == null); 
1

조건부 연산자 사용 :

return NHibernateSession.Current.Query<Client>() 
    .Where(x => x.SalesRepId == id) 
    .OrderBy(x => x.AccountPlan == null ? 1 : 0); 
+0

고마워요! 나는'query.OrderBy (x => x.NextFireTime == null)'을 쓰고 있었지만 작동하지 않았지만'query.OrderBy (x => x.NextFireTime == null? 1 : 0)'잘 동작한다. – Lars

관련 문제