Я использую базу данных SQLite и имею следующий постоянный класс (упрощенный):
public class Project
{
public virtual int Id { get; set; }
public virtual DateTime StartDate { get; set; }
}
, который отображается на эту таблицу в базе данных:
CREATE TABLE projects (
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
start_date DATETIME
)
Теперь мне нужно написать запрос, который выберет все проекты, начатые в данном месяце.
В SQL я мог бы использовать:
SELECT id FROM projects WHERE strftime('%m', start_date) = '12'
Что мне не нравится в этом запросе, так это то, что он использует функцию базы данных " strftime ".
Таким образом, следующий HQL зависит от базовой базы данных:
// 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>();
Я также пытался "из проекта p, где p.StartDate.Month = 12", но это не сработало.
Таким образом, используя HQL или API критериев, можно ли написать такой запрос независимым от базы данных способом?