不确定如何在最后一行下面的示例中完成日期表达式。类似的查询无法执行。我假设我必须使用某种 Projections SqlFunction?有人帮忙吗?
Session.QueryOver(() => myobj)
.JoinAlias(() => myobj.Object, () => o1)
.Where(() => myobj.SomeInt > o1.Date.Subtract(someTime).Minutes);
不确定如何在最后一行下面的示例中完成日期表达式。类似的查询无法执行。我假设我必须使用某种 Projections SqlFunction?有人帮忙吗?
Session.QueryOver(() => myobj)
.JoinAlias(() => myobj.Object, () => o1)
.Where(() => myobj.SomeInt > o1.Date.Subtract(someTime).Minutes);
我们需要将您的日期操作从 C# 方法转换为 DB 服务器函数。对于 MS SQL Server,我们可以使用 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
列名......