2010-03-19 132 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和標準來使用它。