2011-12-09 4 views
1

私は、クライアントとAccountPlanという2つのエンティティを持っています。これらのエンティティは1対0の関係にあります。私は、私のクライアントをフェッチしたいと思います。最初に注文したのは、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、)=>(等しい(x.SalesRepId、p1)))、)、引用符x)=> (Equal(x.AccountPlan、)))) "}

それが重要だ場合はここ10

は、2つのエンティティ間のマッピング関係です:

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


    public AccountPlanMap() 
    { 
     DynamicInsert(); 

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

誰も私が望むものを達成するにNHibernateの無数のいずれかのAPIからのクエリを知っていますか?前もって感謝します。 1回の往復で

答えて

1

2つのクエリは、回避策として一緒に

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

関連する問題