我在c#中使用nhibernate创建查询时遇到了问题。实际上我必须为以下sql语句
创建一个条件查询select fCompanyID,ROW_NUMBER() over( PARTITION BY fCompanyID order by fPropertyID)
from tARCustomer
但似乎nhibernate不支持Row_Number()分区,直到现在我用Google搜索。我需要在nhibernate中使用此查询功能,但我没有得到如何做到这一点。如果有人这样做,请告诉我/帮我解决这个问题。
谢谢,
答案 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