2011-04-18 17 views
16

SQLクエリをNHibernate QueryOver構文に変換しようとしていますが、カウントプロジェクションでソートする方法がわかりません。NHibernate QueryOverでMaxResult、Group By、Order By

select top 10 v.intVoteUserID, COUNT(v.intVoteUserID) 
from Group_MessageVotes v 
where v.dtmVote > :date 
group by v.intVoteUserID 
order by COUNT(v.intVoteUserID) desc 

任意のアイデア:

これはSQLクエリがどのように見えるのですか?

答えて

20

OrderBy節で投影を繰り返すことができます。

次のクエリはIList<object[]>となります。各項目の最初の要素はidで、2番目の要素はカウントです。

var result = session.QueryOver<GroupMessageVotes>() 
.Select(
    Projections.Group<GroupMessageVotes>(e => e.intVoteUserID), 
    Projections.Count<GroupMessageVotes>(e => e.intVoteUserID) 
    ) 
.OrderBy(Projections.Count<GroupMessageVotes>(e => e.intVoteUserID)).Desc 
.Take(10) 
.List<object[]>(); 
+0

これらの一般的な引数はすべて必要ですか? –

+1

@Stefan Steineggerラムダ式にはそれらが必要だと思います。代わりに 'Projections.Count(" intVoteUserID ")'と書くことも可能ですが、私は最初のオプションを優先します。 –

+0

'Projections.Count(e => e.intVoteUserID)'と書くことができるはずです。 –