2

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

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

但到目前为止,我用谷歌搜索似乎 nhibernate 不支持 Row_Number() 分区。我在 nhibernate 中需要这个查询功能,但我不知道如何去做。如果有人这样做过,请告诉我/帮助我解决这个问题。

谢谢,

4

1 回答 1

3

好吧,NHibernate 可以解决任何问题。这可能是 Criteria 语法:

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; }
}

现在您可以使用 alist作为一组ResultDTO

于 2013-01-25T18:43:51.227 回答