2010-03-19 4 views
1

Я пишу платформу уведомлений, используя C# и NHibernate. У меня возникают трудности с моими запросами.NHibernate HQL функции даты

У меня есть объект-клиент, который содержит имущество AssessmentCompleted. Уведомление должно быть отправлено через 21 месяц после сертификации. Поэтому мой запрос должен включать всех клиентов, где их AssessmentCompletedDate + 21months < currentDate. Как мне это достичь? Есть ли метод добавления месяца в NHibernate? Мне нужно добавить 21 месяц к каждому AssessmentCompletedProperty. Мой запрос должен выглядеть так:

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

Почему вы не можете удалить 21 месяц вместо параметра EndDate? – jishi

+0

согласен с jishi - это оставляет только одно вычитание вместо сотен/тысяч – increddibelly

ответ

2

Вы можете наследовать от вашего диалекта и зарегистрировать функцию properly. Например, для MS SQL вы можете зарегистрировать dateadd функции:

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

Сделанные вы можете использовать его в HQL и критериях.

Смежные вопросы