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(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列名の使用を避けるために、いくつかのサブクエリがより適しているはずです...

于 2013-01-13T12:28:08.687 に答える