使用CreateCriteria在Nhibernate中使用分区的Row_Number()

时间:2013-01-25 17:10:07

标签: c# nhibernate nhibernate-criteria

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

创建一个条件查询
select fCompanyID,ROW_NUMBER() over( PARTITION BY fCompanyID order by fPropertyID)
from  tARCustomer  

但似乎nhibernate不支持Row_Number()分区,直到现在我用Google搜索。我需要在nhibernate中使用此查询功能,但我没有得到如何做到这一点。如果有人这样做,请告诉我/帮我解决这个问题。

谢谢,

1 个答案:

答案 0 :(得分:2)

好吧,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; }
}

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