次の LINQ クエリを実行しようとしています。
var tasks = session.Query<Task>()
.Where(t => t.StartDate.DayOfYear == DateTime.UtcNow.DayOfYear)
.ToList();
DayOfYear がサポートされていないため、これは機能しません。しかし、私が言うなら:
var tasks = session.Query<Task>()
.Where(t => t.StartDate.Day == DateTime.UtcNow.Day)
.ToList();
それは正常に動作します。そこで、NHibernate のソースを調べて、どのように機能するようになったのかを確認することにしました。MsSql2000Dialect.cs (MsSql2008Dialect クラスが継承するもの) で次の行を見つけました。
RegisterFunction("day",
new SQLFunctionTemplate(NHibernateUtil.Int32, "datepart(day, ?1)"));
したがって、コンストラクターで次の行を使用して、独自のカスタム方言 (MsSql2008Dialect から継承) を作成しました。
RegisterFunction("dayofyear",
new SQLFunctionTemplate(NHibernateUtil.Int32, "datepart(dy, ?1)"));
そして、構成にカスタム方言を登録しましたが、それでも次のエラーが発生します。
NHibernate.QueryException: プロパティを解決できませんでした: DayOfYear
誰かが私が間違っていることを教えてくれれば幸いです。ありがとう