2010-05-27 63 views
2

我正在使用NHibernate和Lambda Extensions。我想知道如何使用子字符串嵌套Max函數。如何使用Lambda擴展渲染Max(子字符串)

下面的語句檢索Max("invoice_id")

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

但在我的情況下,現場INVOICE_ID以這種方式取得:12345.10,其中12345爲發票號碼,10是指當年(2010年)。此外,每年發票號碼重新從1開始。 因此,我只需要在前5位數字上計算最大值函數。我該怎麼做?

+2

重要嗎?不管最大值是不是相同? (即12345 #### vs 12346 ####,後者仍然是最大的,無論年底是多少4位數字) – Alconja 2010-05-27 22:49:39

+1

當然是,但每年的發票號碼重新從1開始。 對不起我忘了在之前指定它.. – caifa 2010-05-28 07:32:26

+0

現在更有意義。 :) – Alconja 2010-05-31 01:34:22

回答

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();