NHibernate标准API - 如何添加一个子句来比较一个日期与另一个日期减去一个值

时间:2010-07-21 18:53:12

标签: nhibernate criteria

我正在尝试使用NHibernate构建一个标准对象,它将date1与date2进行比较,减去一个值。在Sql Server中我会这样做:

从表中选择*,其中date1< DateAdd(Day,2,date2)

有人能告诉我如何在NHibernate中这样做吗?

干杯

修改

我之前应该已经指定了这个,我想知道如何使用条件API来做到这一点。

此外,date1和date2是表格中的列,因此在运行查询之前我不知道它们的值

3 个答案:

答案 0 :(得分:8)

嗯,完全一样的方式: - )

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()将执行查询并返回指定类型的对象列表。

答案 1 :(得分:0)

鉴于信息量极少,这是我的估计:

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>();

答案 2 :(得分:0)

为了做到这一点,你可能需要create a custom dialect注册dateadd函数,然后use the SqlFunction projection来执行critiera查询。