2

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

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

1 回答 1

3

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

DATEDIFF(日期部分,开始日期,结束日期)

期望您的对象有一个列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列名......

于 2013-01-13T12:28:08.687 回答