c# - 如何使用 Lambda 扩展渲染 Max(Substring)

标签 c# nhibernate criteria nhlambdaextensions

我将 NHibernate 与 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 位数字的 Max 函数。我该怎么做?

最佳答案

您可以像这样使用特定于服务器的函数,例如 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();

关于c# - 如何使用 Lambda 扩展渲染 Max(Substring),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2925518/

相关文章:

NHibernate 和 NHibernate 验证

grails - grails-使用联接表获取查询中的列

c# - 如何使用 C# 从远程位置将 Excel csv 或 xls 文件的行读取到 ASP.NET 应用程序中?

c# - 在 Web 应用程序中使用静态方法的好处

c# - int 到字节数组

grails - 如何使Grails条件作为左联接执行?

yii - 使用 CDbCriteria 很难计算记录

c# - 如果 ConfigurAwait 设置为 False,任务不会进入故障状态

当我使用 TimeSpan 时,MySQL 连接器抛出异常只有 TimeSpan 对象可以被 MySqlTimeSpan 序列化

c# - 存储没有显式 ID 的简单关系