4

DateTime を使用して選択するクエリを作成しようとしています。where パラメータとしての年ですが、nunit から次のエラーが表示されます。

NHibernate.QueryException : プロパティを解決できませんでした: Register.Year of: Estudantino.Domain.Events

クラスEventsには、DateTime 型としてRegisterという名前のプロパティがあります。

public virtual DateTime Registada { get; set; }

これはエラーを返すメソッドです:

  using (ISession session = NHibernateHelper.OpenSession())
        {
            return session.QueryOver<Evento>()
                .Where(x => x.Register.Year == year)
                .List();
        }

変数 year はint型で、メソッドに渡されています。

誰かが私が間違っていることを知っていますか? 私のデータベース サーバーは SQL Server 2005 Express です。

4

4 に答える 4

7

QueryOver は のようなものを解決しませんDateTime.Year

代わりに LINQ を使用します。

return session.Query<Evento>()
              .Where(x => x.Register.Year == year)
              .ToList();
于 2011-01-24T14:53:13.480 に答える
5

QueryOver では、次のように言えます。

dateTimeColumn.YearPart() == 1999

MonthPart()DayPart()などの他の拡張メソッドもあります。

于 2013-12-06T21:58:07.213 に答える
3

代わりに、ここでHQLを使用する必要がある場合があります。基本的に、NHibernateは実際に何をすべきかを知りませんyearRegisterFunction関数を登録するには、を使用する必要があると思いますYEAR

この記事全体を読んで、あなたが何をしようとしているのかを完全に理解してください。

  1. コードでカスタム方言を作成する
  2. MyYearFunction日付の年を返すというSQLServerでの関数を作成します
  3. 次に、HQLを使用して(QueryOverがこれを実行できるかどうかはわかりません)、日付を取得しますwhere dbo.MyYearFunction(:date) = 12" ...
于 2011-01-23T16:06:27.827 に答える
-1

.Where(x => x.Register >= new DateTime(年, 1, 1) && x.Register < new DateTime(年 + 1, 1, 1))

于 2011-06-03T11:40:46.873 に答える