ここCHAR
で、POCO でレガシーデータベースの日付と時刻のフィールドを 1 つの .NETDateTime
プロパティに
結合する方法について、StackOverflow の質問に回答しました( Berrylに感謝します!)。今、私はカスタム ICritera クエリを取得して、まさにそのプロパティに対して機能させようとしていますが、役に立ちません。ここに私のクエリがあります:DateTime
ICriteria criteria =
Session.CreateCriteria<InputFileLog>()
.Add(Expression.Gt(MembersOf<InputFileLog>.GetName(x => x.FileCreationDateTime), DateTime.Now.AddDays(-14)))
.AddOrder(Order.Desc(Projections.Id()))
.CreateCriteria(typeof(InputFile).Name)
.Add(Expression.Eq(MembersOf<InputFile>.GetName(x => x.Id), inputFileName));
IList<InputFileLog> list = criteria.List<InputFileLog>();
そして、これが生成しているクエリです:
SELECT this_.input_file_token as input1_9_2_,
this_.file_creation_date as file2_9_2_,
this_.file_creation_time as file3_9_2_,
this_.approval_ind as approval4_9_2_,
this_.file_id as file5_9_2_,
this_.process_name as process6_9_2_,
this_.process_status as process7_9_2_,
this_.input_file_name as input8_9_2_,
gonogo3_.input_file_token as input1_6_0_,
gonogo3_.go_nogo_ind as go2_6_0_,
inputfile1_.input_file_name as input1_3_1_,
inputfile1_.src_code as src2_3_1_,
inputfile1_.process_cat_code as process3_3_1_
FROM input_file_log this_
left outer join go_nogo gonogo3_ on this_.input_file_token=gonogo3_.input_file_token
inner join input_file inputfile1_ on this_.input_file_name=inputfile1_.input_file_name
WHERE this_.file_creation_date > :p0 and
this_.file_creation_time > :p1 and
inputfile1_.input_file_name = :p2
ORDER BY this_.input_file_token desc;
:p0 = '20100401',
:p1 = '15:15:27',
:p2 = 'LMCONV_JR'
CHAR
DBではsの代わりにsを使用してより大きな比較を行っているため、クエリは実際に私が望むもの(過去2週間のすべての行)を実際に提供しないことを除いて、まさに私が期待するものですDATE
。CreateSQLQuery() を実行せずに、クエリでCHAR
値をに変換するクエリを取得する方法がわかりません。これは避けたいと思います。誰でもこれを行う方法を知っていますか?DATE
更新:これを達成するために or 式を使用しようと検討してきましたがProjections.SqlFunction()
、これまでのところ役に立ちません。これが私が使用しているコードですSqlFunction()
が、NHibernate.QueryException : property does not map to a single column: FileCreationDateTime
エラーが発生します:
DateTime twoWeeksAgo = DateTime.Now.AddDays(-14);
ICriteria criteria =
Session.CreateCriteria<InputFileLog>()
.Add(Restrictions.Gt(Projections.SqlFunction("to_date", NHibernateUtil.DateTime, Projections.Property(MembersOf<InputFileLog>.GetName(x => x.FileCreationDateTime))), twoWeeksAgo))
//.Add(Expression.Gt(MembersOf<InputFileLog>.GetName(x => x.FileCreationDateTime), DateTime.Now.AddDays(-14)))
.AddOrder(Order.Desc(Projections.Id()))
.CreateCriteria(typeof(InputFile).Name)
.Add(Expression.Eq(MembersOf<InputFile>.GetName(x => x.Id), inputFileName));
私はここで何か間違ったことをしていると確信しています.NETプロパティを2つのOracle SQL列に分割FileCreationDateTime
するカスタムを使用しているため、まだ好きではありません(詳細については、このStackOverflowの質問を参照してください)。ICompositeUserType
DateTime
CHAR