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