不确定如何在最后一行的下面的示例中完成日期表达式。类似的查询无法执行。我假设我将不得不使用某种预测SqlFunction?有人帮忙吗?
Session.QueryOver(() => myobj)
.JoinAlias(() => myobj.Object, () => o1)
.Where(() => myobj.SomeInt > o1.Date.Subtract(someTime).Minutes);
答案 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
列名...