加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – NHibernate的QueryOver语法可以选择SqlFunction的MAX()吗

发布时间:2020-12-16 01:46:01 所属栏目:百科 来源:网络整理
导读:我在我的方言子类中注册了一个SQL函数 RegisterFunction("addseconds",new SQLFunctionTemplate(NHibernateUtil.Date,"dateadd(second,?1,?2)")); 可以在这样的查询中使用 var q = _session.QueryOverEvent() .Select( Projections.SqlFunction( "addseconds
我在我的方言子类中注册了一个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_.StartTime)) as y0_
FROM   [Event] this_

不幸的是,我似乎无法让SelectMax采用Projections.SqlFunction.可以吗?

解决方法

您需要将NHUtil更新为DateTime:

RegisterFunction("addseconds",new SQLFunctionTemplate(NHibernateUtil.DateTime,?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_.SomeDate)) as y0_
FROM   Employee this_

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读