2

私はLambdaExtensionsでNHibernateを使用しています。Max関数をサブストリングでネストする方法を知りたいのですが。

次のステートメントはMax("invoice_id")

var ret = session
          .CreateCriteria<Invoice>()
          .SetProjection(Projections.Max("invoice_id"))
          .UniqueResult();

しかし、私の場合、フィールドinvoice_idは次のように作成されます。12345.10ここで、12345は請求書番号であり、10は現在の年(2010)を表します。さらに、毎年、請求書番号は1から再開されます。したがって、最初の5桁でのみMax関数を計算する必要があります。どうすればいいですか?

4

2 に答える 2

0

文字列の操作に依存するのではなく、請求書番号の構造体とカスタムNHibernateタイプを作成する必要があります。

structおよびnhタイプは、比較およびソートのためのすべてのロジックをカプセル化します。

http://intellect.dk/post/Implementing-custom-types-in-nHibernate.aspx

于 2010-07-28T10:34:48.640 に答える
0

次のように、SUBSTRING (または DBMS で同等のもの) のようなサーバー固有の関数を使用できます。

var ret = session
.CreateCriteria<Invoice>()
    .SetProjection(
        Projections.Max(
            new SqlFunctionProjection("SUBSTRING", 
                NHibernateUtil.String, 
                Projections.Property("invoice_id"), 
                Projections.Constant(1), 
                Projections.Constant(5))))
    .UniqueResult();
于 2010-06-16T12:19:12.027 に答える