【发布时间】: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
是否可以在 CreateCriteria 语句中使用 MONTH?
NHibernate 是否支持 YEAR 和/或 MONTH?
我有一个类似的 sql 语句 select obs2.Lopnr from Obs obs2 where MONTH(obs2.Datum)=11)
最诚挚的问候
垫子
【问题讨论】:
标签: nhibernate criteria
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 现在已嵌入到您的查询中。
要记住的另一件事是,您在此处使用的名称是映射的属性和类名称,而不是基础列和表名称。
【讨论】:
我认为在标准声明中是不可能的。 HQL 查询支持日期函数(年、月、日),因此它们可以以这种方式使用。
【讨论】: