API критериев NHibernate - как я добавляю пункт для сравнения одной даты с другой датой минус значение

Я пытаюсь создать объект критериев, использующий NHibernate, который сравнит date1 с date2 минус значение. В SQL-сервере я сделал бы это:

выберите * из таблицы где date1 <DateAdd (День, 2, date2)

Кто-либо может сказать, как я сделал бы это в NHibernate?

Удачи

Править

Я должен был указать это ранее, я хотел бы узнать, как действительно делают это использование критериев API.

Также date1 и date2 являются столбцами на таблице, таким образом, я не знаю их значение прежде, чем выполнить запрос

8
задан Phil Hale 22 July 2010 в 14:08
поделиться

3 ответа

Ну, точно так же: -)

HQL:

session.CreateQuery("from Entity where Date1 < DateAdd(Day, 2, Date2)")

SQL:

session.CreateSQLQuery(@"select * from table
                         where date1 < DateAdd(Day, 2, date2)")
       .AddEntity(typeof(Entity))

Критерии:

session.CreateCriteria<Entity>()
       .Add(Restrictions.LtProperty(
            Projections.Property("Date1"),
            Projections.SqlFunction(
                        new SQLFunctionTemplate(NHibernateUtil.Date,
                                                "DateAdd(Day, 2, ?1)"),
                        NHibernateUtil.Date,
                        Projections.Property("Date2"))))

Во всех случаях .List () выполнит запрос и вернет список объектов указанного типа.

8
ответ дан 5 December 2019 в 20:12
поделиться

Учитывая минимальный объем информации, вот моя оценка:

TimeSpan timespanToSubtract;
var dateToCompare = new DateTime().Subtract(timespanToSubtract);

// using NHibernate.Linq:
var result = Session.Linq<Table>()
                 .Where(t => t.Date1 < dateToCompare)
                 .ToList();

// using HQL
var hql = "from Table t where t.Date1 < :dateToCompare");
var result = Session.CreateQuery(hql)
                 .SetParameter("dateToCompare", dateToCompare)
                 .List<Table>();
0
ответ дан 5 December 2019 в 20:12
поделиться

Для этого вам, вероятно, потребуется создать собственный диалект , который регистрирует функцию dateadd, а затем использовать проекцию SqlFunction для выполнить критический запрос.

0
ответ дан 5 December 2019 в 20:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: