J'utilise la base de données SQLite et ont la suivante classe persistante (simplifiée):Utilisation de dates dans le « où » clause de HQL requête
public class Project
{
public virtual int Id { get; set; }
public virtual DateTime StartDate { get; set; }
}
qui est mis en correspondance avec cette table dans la base de données:
CREATE TABLE projects (
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
start_date DATETIME
)
Maintenant, j'ai besoin d'écrire une requête qui va sélectionner tous les projets qui ont commencé dans un mois donné.
Dans SQL je pourrais utiliser:
SELECT id FROM projects WHERE strftime('%m', start_date) = '12'
Ce que je n'aime pas au sujet de cette requête est qu'il utilise la base de données fonction spécifique « strftime ».
Ainsi, la HQL suivante dépend de la base de données sous-jacente:
// Get all projects that started in December (no matter which year)
var projects = session
.CreateQuery(
"from Project p " +
"where strftime('%m', p.StartDate) = :month")
.SetParameter("month", "12")
.List<Project>();
J'ai aussi essayé « du projet p où p.StartDate.Month = 12 », mais cela n'a pas fonctionné. Donc, en utilisant l'API HQL ou les critères, est-il possible d'écrire une telle requête dans une base agnostique de base de données?
David, j'ai essayé ce que vous suggérez mais je m'y suis la même exception que si je p.StartDate.Month = 12. NHibernate.QueryException: déréférencé: StartDate –