当前位置: 首页 > 面试题库 >

NHibernate的QueryOver语法可以选择SqlFunction的MAX()吗?

宋伯寅
2023-03-14
问题内容

我已经在我的方言子类中注册了一个SQL函数

RegisterFunction("addseconds", new SQLFunctionTemplate(NHibernateUtil.Date, "dateadd(second, ?1, ?2)"));

可以在像这样的查询中使用

var q = _session.QueryOver<Event>()
    .Select(
        Projections.SqlFunction(
            "addseconds",
            NHibernateUtil.Date,
            Projections.Property<Event>(x => x.DurationInSeconds),
            Projections.Property<Event>(x => x.StartTime)));

产生SQL

SELECT dateadd(second,
               this_.DurationInSeconds,
               this_.StartTime) as y0_
FROM   [Event] this_

但是我真正想要的是

SELECT MAX(dateadd(second,
               this_.DurationInSeconds,
               this_.StartTime)) as y0_
FROM   [Event] this_

不幸的是,我似乎无法让SelectMax接受Projections.SqlFunction。能做到吗


问题答案:

您需要将NHUtil更新为DateTime:

RegisterFunction("addseconds", new SQLFunctionTemplate(NHibernateUtil.DateTime, "dateadd(second, ?1, ?2)"));

否则,您将只处理日期部分。

您的查询很好,您只需将其包装在Projections.Max()中,如下所示:

var q = _session.QueryOver<Event>()
                .Select(Projections.Max(Projections.SqlFunction(
                        "addseconds",
                        NHibernateUtil.DateTime,
                        Projections.Property<Event>(y => y.DurationInSeconds),
                        Projections.Property<Event>(y => y.StartTime))))
                .SingleOrDefault<DateTime>();

我刚刚快速编写了一个测试(与上面的命名不同),它产生了查询:

SELECT max(dateadd(second,
                   this_.DurationInSeconds,
                   this_.SomeDate)) as y0_
FROM   Employee this_


 类似资料:
  • 问题内容: 我正在使用Nhibernate。我正在通过queryover方法编写查询。我能够像下面的代码中那样编写and子句。它的工作正常。 但是我想使用子句代替,或两者结合使用。我该如何实施。谢谢 问题答案: 语法 (如标签所示在C#中) 为: 在这种情况下,可能是这样的 (再次在C#中,问题似乎使用了VB) :

  • 问题内容: 我正在尝试返回记录编号的历史位置 我所拥有的是: 解析大约需要1分钟,并返回如下数据: 我真正希望看到的是像这样的查询中的数据: 哪个返回 第二个查询更好,但我真的只想显示每个记录ID和位置的最后修改时间。 有人可以看到我在做什么吗?感谢您的帮助。 问题答案: 像这样 其核心是…

  • 我使用的是Eclipselink(JPA)+GlassFish V3.1.2+NetBeans 7.1.2 我有一个带有复合主键的表:

  • 我必须用一个特定的名称(我使用spring和Jpa)来命名扩展CrudRepository的接口,即。 所以在本例中,我有一个名为UserRepository的实体 我尝试了注释 但这行不通...

  • 问题内容: 这是表结构 我需要一条声明,列出从最近输入的每条消息,我不知道如何执行此操作。谁能指出我正确的方向?提前谢谢。 问题答案: 应该这样做:

  • 问题内容: 我有这样构建的mysql表: 当我做: 我得到: 为每个唯一用户生成一个唯一的post_id。 我需要gen_id列为1 2 3 4 5 6等。执行插入操作时如何增加此列。我尝试了以下方法,但无法正常工作。什么是正确的方法? 问题答案: 试试这个: