2010-03-19 6 views
1

J'écris une plateforme de notification en utilisant C# et NHibernate. J'ai des difficultés avec mes requêtes.Fonctions de date NHibernate HQL

J'ai une entité Client - qui contient une propriété AssessmentCompleted. Une notification doit être envoyée 21 mois après la certification. Donc, ma requête doit inclure tous les clients où leur AssessmentCompletedDate + 21months < currentDate. Comment puis-je y parvenir? Existe-t-il une méthode d'ajout de mois dans NHibernate? Je dois ajouter 21 mois à chaque AssessmentCompletedProperty. Ma requête doit ressembler à quelque chose comme:

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

Pourquoi ne pouvez-vous pas supprimer 21 mois au paramètre EndDate à la place? – jishi

+0

d'accord avec jishi - cela ne laisse qu'une soustraction au lieu de centaines/milliers – increddibelly

Répondre

2

Vous pouvez hériter de votre dialecte et enregistrer la fonction properly. Par exemple, pour MS SQL vous pouvez enregistrer la fonction dateadd:

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

Cela fait vous pouvez l'utiliser dans HQL et critères.

Questions connexes