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

NHibernate标准API-如何添加一个子句来比较一个日期和另一个日期减去一个值,nhibernate,criteria,Nhibernate,Criteria,我正在尝试使用NHibernate构建一个criteria对象,该对象将比较date1和date2减去一个值。在Sql Server中,我将执行以下操作: 从date1t.Date1

我正在尝试使用NHibernate构建一个criteria对象,该对象将比较date1和date2减去一个值。在Sql Server中,我将执行以下操作:

从date1 有人能告诉我在NHibernate会怎么做吗

干杯

编辑

我应该在前面指定它,我想了解如何使用CriteriaAPI实现这一点


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

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>();
TimeSpan-TimeSpan-osubtract;
var dateToCompare=new DateTime().Subtract(timespanToSubtract);
//使用NHibernate.Linq:
var result=Session.Linq()
.Where(t=>t.Date1
嗯,完全一样:-)

HQL:

session.CreateQuery(“来自实体,其中Date1
SQL:

session.CreateSQLQuery(@“从表中选择*)
其中date1
标准:

session.CreateCriteria<Entity>()
       .Add(Restrictions.LtProperty(
            Projections.Property("Date1"),
            Projections.SqlFunction(
                        new SQLFunctionTemplate(NHibernateUtil.Date,
                                                "DateAdd(Day, 2, ?1)"),
                        NHibernateUtil.Date,
                        Projections.Property("Date2"))))
session.CreateCriteria()
.Add(Restrictions.LtProperty(
预测。财产(“日期1”),
Projections.SqlFunction(
新的SQLFunctionTemplate(NHibernateUtil.Date,
“日期添加(第2天,第1天)”,
NHibernateUtil.日期,
预测。财产(“日期2”))

在所有情况下,
.List()
都将执行查询并返回指定类型的对象列表。

为此,您可能需要注册dateadd函数,然后执行critiera查询。

是否希望使用标准API、HQL、,或者Nhibernate.Linq?还有..这里的感兴趣的参数是天数吗?对不起,我应该指定我想要使用标准API我不太明白为什么你需要使用DateAdd..你不能通过编程计算日期并进行比较吗?我认为,您需要弄清楚这里的参数是什么……不幸的是,不是。问题是两个日期值都是数据库表中的列,所以在运行查询之前,我不知道这两个值。我没有将编程声明的日期与数据库中的日期进行比较,它们都在数据库中。我担心这不会起作用,因为在运行查询之前,我不知道任何一个日期值,因为它们都是表中的列
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"))))