2017-07-21 6 views
0

を登録しようあなたの実体を知らなくても答えることは困難ですNHibernateは複数の条件は

select  a.ID, count(b.ID) 
from  appusers a 
left join weeklytasks b on a.ID = b.TaskOwner and b.taskstatus = 1 
group by a.ID 

答えて

1

に、このSQLクエリを変換するいくつかの助けを必要としてください、マッピング、(ICreteriaのAPI、QueryOver、LINQの)技術を使用していました。

しかし、私はQueryOverを使用して、このソリューションを提案することができます。

AppUser ownerAlias = null; 
WeeklyTask taskAlias = null; 
var result = Session.QueryOver(() => taskAlias) 
       .JoinAlias(x => x.TaskOwner, 
          () => ownerAlias, 
          NHibernate.SqlCommand.JoinType.RightOuterJoin, 
          Restrictions.Where(() => taskAlias.Status == 1)) 
       .SelectList(list => list 
        .SelectGroup(x => ownerAlias.Id) 
        .SelectCount(x => x.Id)) 
       .List<object[]>(); 

またはこの:

var result = Session.QueryOver<WeeklyTask>() 
       .Where(x => x.Status == 1) 
       .Right.JoinQueryOver(x => x.TaskOwner) 
       .SelectList(list => list 
        .SelectGroup(x => x.TaskOwner.Id) 
        .SelectCount(x => x.Id)) 
       .List<object[]>(); 

このアプローチでは、あなたのWeeklyTaskエンティティ必見AppUserエンティティにマッピングされた参照が含まれていることに注意してください。

+0

ありがとう、最初のQueryOverは完全に機能しました –