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 にはあらゆる問題に対する解決策があります。これは、基準の構文である可能性があります。

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

于 2013-01-25T18:43:51.227 に答える