2011-04-18 26 views
16

Tôi đang cố chuyển đổi truy vấn SQL thành cú pháp NHibernate QueryOver, nhưng tôi không hiểu cách sắp xếp theo phép chiếu đếm.NHibernate QueryOver với MaxResult, Nhóm theo thứ tự Bằng cách

Đây là những gì các truy vấn SQL trông giống như:

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 

ý tưởng Bất kỳ?

Trả lời

20

Bạn chỉ cần lặp lại phép chiếu trong mệnh đề OrderBy.

Truy vấn sau đây sẽ cung cấp cho bạn IList<object[]> trong đó phần tử đầu tiên của mỗi mục là id và phần tử thứ hai là số đếm.

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

Có phải tất cả các đối số chung này được yêu cầu không? –

+1

@Stefan Steinegger Tôi nghĩ rằng chúng được yêu cầu cho các biểu thức lambda. Có thể viết 'Projections.Count (" intVoteUserID ")' thay vào đó, nhưng tôi thích tùy chọn đầu tiên. –

+0

Có thể viết 'Projections.Count (e => e.intVoteUserID)'. –

Các vấn đề liên quan