C# 将SQL查询转换为NHibernate查询

C# 将SQL查询转换为NHibernate查询,c#,sql,sql-server,nhibernate,paging,C#,Sql,Sql Server,Nhibernate,Paging,我有这两张桌子 AppUser 主键:用户标识 用户原则 public UserPagedQuery(ISessionProvider<ISession> sessionProvider) { _sessionProvider = sessionProvider; _query = sessionProvider.Session.QueryOver<IUser>(); var uc = _query.UnderlyingCriteria;

我有这两张桌子

AppUser

主键:用户标识

用户原则

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;
}
用户ID(不是此表中的键)

用户名

我需要在NHibernate中使用分页进行此查询: 我现在的相关代码是: (IUser代表的AppUser;StoredCredentials代表的UserPrinciples

这还不够好,因为我只需要每个用户id中的一条记录,对于某些用户,通过这个查询我可以获得多条记录,这就是问题所在

有人能帮忙吗? 不确定是否需要任何其他细节


感谢并向您致以最诚挚的问候

表示为不带分区的sql

SELECT TOP(page_size) up.*, au.* from
  (SELECT UserName, Min(User_Id) as User_Id FROM UserPrinciples GROUP BY UserName) as x
LEFT JOIN
  UserPrinciples up ON x.UserName = up.UserName AND x.User_Id = up.User_Id
LEFT JOIN
  AppUser au ON  au.User_Id = up.User_Id
翻译成linq应该是这样的:

var y = from up1 in session.Query<Employment>()
        group up1 by up1.Name into g
        select new { Name = g.Key, UserId = g.Min(x => x.Company.Id) } into f
        join up2 in session.Query<Employment>() on new { f.Name, f.UserId } equals new { up2.Name, UserId = up2.Company.Id }
        select new SomeDto
        {
            ProfileName = up2.Name,
            UserId = up2.User.Id,
            Name = up2.User.Name,
        };

var results = y.ToList();
var y=来自会话中的up1.Query()
按up1将up1分组。将名称放入g中
在f中选择新的{Name=g.Key,UserId=g.Min(x=>x.Company.Id)}
在新{f.Name,f.UserId}上的session.Query()中加入up2等于新{up2.Name,UserId=up2.Company.Id}
选择要添加的新内容
{
ProfileName=up2.Name,
UserId=up2.User.Id,
Name=up2.User.Name,
};
var结果=y.ToList();
SELECT TOP(page_size) up.*, au.* from
  (SELECT UserName, Min(User_Id) as User_Id FROM UserPrinciples GROUP BY UserName) as x
LEFT JOIN
  UserPrinciples up ON x.UserName = up.UserName AND x.User_Id = up.User_Id
LEFT JOIN
  AppUser au ON  au.User_Id = up.User_Id
var y = from up1 in session.Query<Employment>()
        group up1 by up1.Name into g
        select new { Name = g.Key, UserId = g.Min(x => x.Company.Id) } into f
        join up2 in session.Query<Employment>() on new { f.Name, f.UserId } equals new { up2.Name, UserId = up2.Company.Id }
        select new SomeDto
        {
            ProfileName = up2.Name,
            UserId = up2.User.Id,
            Name = up2.User.Name,
        };

var results = y.ToList();