具有日期值表达式的流畅Nhibernate QueryOver

时间:2013-01-12 20:26:14

标签: nhibernate fluent-nhibernate

不确定如何在最后一行的下面的示例中完成日期表达式。类似的查询无法执行。我假设我将不得不使用某种预测SqlFunction?有人帮忙吗?

Session.QueryOver(() => myobj)
.JoinAlias(() => myobj.Object, () => o1)
.Where(() => myobj.SomeInt > o1.Date.Subtract(someTime).Minutes);

1 个答案:

答案 0 :(得分:3)

我们需要将日期操作从C#方法转换为DB Server函数。对于MS SQL Server,我们可以使用DATEDIFF函数:

DATEDIFF(datepart, startdate, endate)

期望您的对象有一列Date,因此我们可以创建此ICriterion

DateTime someTime = ...;
var sqlString = " DATEDIFF( mi, ?, [Date]) < {alias}.SomeInt ";
var sql = NHibernate.Criterion.Expression.Sql(sqlString
              , someTime
              , NHibernate.NHibernateUtil.DateTime);

将此SQL语句作为ICriterion,我们可以调整您的代码段:

Session
  .QueryOver(() => myobj)
  .JoinAlias(() => myobj.Object, () => o1)
  .Where(sql); // sql = our ICriterion above

这只是一个简单的例子......起点如何使用NHibernate API来做...一些子查询应该更适合避免使用明确的SomeInt列名...