2010-03-19 93 views
1

我正在写一个使用C#和NHibernate的通知平台。我在查询时遇到困难。NHibernate的HQL日期功能

我有一个客户实体 - 其中包含一个AssessmentCompleted属性。通知应在认证后21个月内发出。所以我的查询需要包括所有的客户,他们的AssessmentCompletedDate + 21months < currentDate。我如何实现这一目标? NHibernate中有一个月添加方法吗?我需要为每个AssessmentCompletedProperty增加21个月的时间。我的查询需要看起来像:

SELECT new Notification(c.Id, c.Description, c.AssessmentCompleted + 21 
      FROM Cusomter c 
      AND c.AssessmentCompleted + 21 <= :EndDate 
+2

为什么不能仅仅将21个月的参数EndDate移除? – jishi 2010-03-19 20:29:46

+0

同意jishi - 只留下一个减法而不是数百/数千 – increddibelly 2012-06-27 14:44:36

回答

2

你可以从你的方言继承和注册properly功能。 例如,对于MS SQL可以注册dateadd功能:

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

上述工作完成后,你可以在HQL和标准来使用它。