【问题标题】:CreateCriteria and MONTHCreateCriteria 和 MONTH
【发布时间】:2009-02-06 09:44:04
【问题描述】:

是否可以在 CreateCriteria 语句中使用 MONTH?

NHibernate 是否支持 YEAR 和/或 MONTH?

我有一个类似的 sql 语句 select obs2.Lopnr from Obs obs2 where MONTH(obs2.Datum)=11)

最诚挚的问候

垫子

【问题讨论】:

    标签: nhibernate criteria


    【解决方案1】:

    ICriteria 支持arbitrary SQL as a restriction。因此你可以这样做:

    var criteria = session.CreateCriteria(typeof(Obs))
        .Add(Expression.Sql("MONTH({alias}.Datum) = ?", 11, NHibernateUtil.Int32);
    var results = criteria.List<Obs>();
    

    这将执行一个 SQL 查询,将 {alias} 替换为 NHibernate 用于 Obs 表的别名。当然,这限制了您对其他数据库的可移植性,因为 SQL 现在已嵌入到您的查询中。

    要记住的另一件事是,您在此处使用的名称是映射的属性和类名称,而不是基础列和表名称。

    【讨论】:

      【解决方案2】:

      我认为在标准声明中是不可能的。 HQL 查询支持日期函数(年、月、日),因此它们可以以这种方式使用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-23
        • 1970-01-01
        • 1970-01-01
        • 2018-01-23
        • 1970-01-01
        相关资源
        最近更新 更多