2

我将 NHibernate 与 Lambda 扩展一起使用。我想知道如何用 Substring 嵌套 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 回答