2013-04-12 155 views
1

你好,我是努力實現下列SQLNHibernate的查詢子查詢組通過加入回主實體

SELECT this_.* 
FROM WorkItems this_ 
WHERE this_.UserId = (

SELECT this_1_.y0_ as y0_ 
FROM 
(
    SELECT top 1 this_0_.UserId as y0_, count(this_0_.UserId) as y1_ 
    FROM WorkItems this_0_ 
    WHERE this_0_.StateId = 1 and this_0_.Type like 'Data' 
    GROUP BY this_0_.UserId 
    ORDER BY y1_ desc 
) this_1_ 

); 

到目前爲止,我已經manged產生相當接近的東西。我錯過了我只是選擇了userId的部分。 繼承人的查詢到目前爲止

var subquery = QueryOver.Of<WorkItem>().Where(w => w.State == state) 
           .AndRestrictionOn(w => w.Type).IsLike(type, MatchMode.Exact) 
           .SelectList(list => 
              list.SelectGroup(w => w.UserId) 
               .WithAlias(() => resultAlias.userId) 
               .SelectCount(w => w.UserId) 
               .WithAlias(() => resultAlias.count)) 
           .OrderByAlias(() => resultAlias.count) 
           .Desc().Take(1); 

     var query = 
      CurrentSession.QueryOver<WorkItem>() 
          .WithSubquery 
          .WhereProperty(p => p.UserId) 
          .Eq(subquery); 

回答

1

試試這個: - 這正是我一直在尋找

var subquery = QueryOver.Of<WorkItem>().Where(w => w.State == state) 
       .AndRestrictionOn(w => w.Type).IsLike(type, MatchMode.Exact) 
       .SelectList(list => list.SelectGroup(w => w.UserId)) 
        .OrderBy(Projections.Count<WorkItem>(x => x.UserId)) 
       .Desc().Take(1); 

var query = CurrentSession.QueryOver<WorkItem>() 
       .WithSubquery 
       .WhereProperty(p => p.UserId) 
       .Eq(subquery); 
+0

感謝加里! – Mark