2010-05-27 82 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();