0

Oracle db をモックするメモリ内の sqlite db から数行を返すのにかなりの時間を費やしています。Null 可能な DateTime で行をプルアップする NHibernate クエリを作成しています。私はそれを正しくマッピングしたと思います。見てください:

データ オブジェクト プロパティ:

public virtual System.Nullable<System.DateTime> RequiredInstallDt { get; set; }

マッピング:

Map(x => x.RequiredInstallDt).Column("REQUIRED_INSTALL_DT").Nullable();

データベースには 2 つの行があります。引き上げるべきものとそうでないもの。私が求めている日付は2012-8-1です。時間の値はなく、データベースにもありません。これは確認できました。1 つの行には 8 月 1 日があり、もう 1 つの行にはありません。1 つのレコードが返されることを期待しています。

私が言うなら:

IList<Request> ra = new RequestDAO().ListAll();

これは、クエリと同じ呼び出しで既知の作業メソッドであり、期待どおりに 2 つのレコードを取得します。

linq、hql、および CreateCriteria バージョンを使用して、同じクエリのいくつかのバージョンを試しました。結果はほぼ常に同じです。0 レコードが返されます (別の方法は NHibernate.Hql.Ast.ANTLR.QuerySyntaxException なので、PEBKAC です)。これらのクエリ バージョンの 1 つを次に示します。

        DateTime installDate = new DateTime(2012, 8, 1);
        var requests = session.CreateCriteria<Request>()
            .Add(Restrictions.Ge("RequiredInstallDt", installDate))
            .Add(Restrictions.Lt("RequiredInstallDt", installDate.AddDays(1)))
            .List<Request>();

読んでくれてありがとう..ご意見ありがとうございます。

4

1 に答える 1

0

not null制限を追加してみてください。あなたのクエリは

DateTime installDate = new DateTime(2012, 8, 1);
var requests = session.CreateCriteria<Request>()
        .Add(Restrictions.Ge("RequiredInstallDt", installDate))
        .Add(Restrictions.Lt("RequiredInstallDt", installDate.AddDays(1)))
        .Add(Restriction.IsNotNull("RequiredInstallDt"))
        .List<Request>();
于 2012-10-18T22:24:30.260 に答える