0

DateTime エンティティ プロパティの Hour プロパティに基づいてフィルター処理するように NHibernate (EF はそれを行うことができた) を説得するのに苦労しています。私のエンティティは次のようになります:

public class Invoice {
    // ...
    public DateTime Time { get; set; }
    // ...
}

特定の時間 (たとえば 22 時) に作成されたすべての請求書を取得する必要があります。可能なクエリは次のとおりです。

from   i in s.Linq<Invoice>()
where  i.Type.Id == Invoice.Type.Local &&
       i.TimeOfRegister.Hour == 22
select i

ただし、TimeOfRegister のプロパティ Hour を解決できなかったことを示す例外がスローされています...

LE : 例外の詳細: プロパティを解決できませんでした: TimeOfRegister.Hour of: MyCompany.Entities.Invoice

4

2 に答える 2

2

NHibernate は DateTime を、選択できるプロパティを持つコンポーネントとして認識せず、単一のプロパティとして認識しているようです。DateTime の Hour 部分を取得するには、おそらく関数を使用する必要があります。

SqlServer2005 の HQL: hour(i.TimeOfRegister)

于 2010-01-12T16:45:00.833 に答える
1

さて、私は同僚から別のルートを取るようにアドバイスされました:

エンティティに int (またはバイト) プロパティを定義し (「HourOfRegister」としましょう)、マッピング クラスでそれを formula にマップします。

Map(a => a.HourOfRegister).Formula("DATEPART(HOUR, TimeOfRegister)");

その後、クエリで好きなように使用できます。

于 2010-01-13T12:28:10.907 に答える