【发布时间】:2014-10-05 14:17:52
【问题描述】:
我有这两张桌子
应用用户
PK:用户 ID
用户原则
User_ID(不是此表中的键)
用户名
我需要在 NHibernate 中使用分页进行此查询:
SELECT TOP(page_size)
FROM AppUser this_ left join
(select UserPrinciples.*
from (select UserPrinciples.*,
row_number() over (partition by UserName order by User_Id) as seqnum
from UserPrinciples
) UserPrinciples
where seqnum = 1) as b
on this_.User_Id=b.User_ID
我现在的相关代码是:
(AppUser 由 IUser 代表;UserPrinciples 由 StoredCredentials 代表)
public UserPagedQuery(ISessionProvider<ISession> sessionProvider)
{
_sessionProvider = sessionProvider;
_query = sessionProvider.Session.QueryOver<IUser>();
var uc = _query.UnderlyingCriteria;
var ap = uc.GetOrCreateAssociationPath("StoredCredentials");
ap.AddOrder(Order.Asc("UserName"));
}
public IEnumerable<IUser> Execute()
{
var pagedReceiving = _query.TransformUsing(Transformers.DistinctRootEntity).List<IUser>();
return pagedReceiving;
}
但是这段代码会返回类似这样的查询~:
SELECT TOP(page_size) FROM AppUser left outer join UserPrinciples
on AppUser.User_Id=UserPrinciples.User_ID
ORDER BY UserPrinciples.UserName asc
这还不够好,因为我只需要每个 user_id 中的一条记录,并且通过此查询,对于某些用户,我可以获得多条记录,这就是问题所在。
有人可以帮忙吗? 不知道是否需要任何其他细节
感谢和问候
【问题讨论】:
标签: c# sql sql-server nhibernate paging