以下の例の最後の行で日付式を実行する方法がわかりません。同様のクエリは実行に失敗します。ある種の 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関数を使用できます。
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
これは簡単な例です...NHibernateAPIを使用してそれを行う方法の出発点...明示的なSomeInt
列名の使用を避けるために、いくつかのサブクエリがより適しているはずです...