Row_Number() 使用 CreateCriteria 在 Nhibernate 中进行分区

本文关键字:Nhibernate 分区 CreateCriteria Number 使用 Row | 更新日期: 2023-09-27 17:56:14

我在 c# 中创建 nhibernate 查询时遇到了问题。实际上我必须为以下sql语句创建一个条件查询

select fCompanyID,ROW_NUMBER() over( PARTITION BY fCompanyID order by fPropertyID)
from  tARCustomer  

但似乎 nhibernate 不支持 Row_Number() 分区,因为直到现在我用谷歌搜索。我需要 nhibernate 中的此查询功能,但我不知道如何做到这一点。如果有人这样做,请让我知道/帮助我解决这个问题。

谢谢

Row_Number() 使用 CreateCriteria 在 Nhibernate 中进行分区

好吧,NHibernate可以为任何事情提供解决方案。这可能是条件语法:

var list = session
  .CreateCriteria<Customer>()
  .SetProjection
  (
       Projections.SqlProjection
       (   
          "fCompanyID, ROW_NUMBER() over( PARTITION BY fCompanyID order by fPropertyID) as RowNumber"
          , new string[] {"fCompanyID", "RowNumber"}
          , new IType[] { NHibernate.NHibernateUtil.Int32, NHibernate.NHibernateUtil.Int32}
       )
  )
  .SetResultTransformer(Transformers.AliasToBean<ResultDTO>())
  .List<ResultDTO>()
;

ResultDTO是这样的:

public class ResultDTO
{
  public virtual int RowNumber { get; set; }
  public virtual int fCompanyID{ get; set; }
}

现在,您可以将list作为一组ResultDTO