私は現在のプロジェクトでNHibernate(SQLiteを使用)を始めたばかりでQuery<>
、Linqでdbクエリを作成することに慣れていたため、主にを使用しました。
より複雑なクエリに直面したとき、私はいくつかの調査を行い、 「QueryOver構文はNH固有である」ためQueryOver<>
、それを優先する必要があると考えました。また、成し遂げられないことができることは何もないようです。Query<>
Query<>
QueryOver<>
だから私はそれにQuery<>
応じてすべての使用法を置き換え始めました。私が最初の「問題」を抱えるのはそう長くはかからなかったQuery<>
。CustomNumber
例(表の列から最大値を選択BillingDataEntity
):
int result = Session.Query<BillingDataEntity>().Select(x => x.CustomNumber).OrderByDescending(a => a).FirstOrDefault();
int result = Session.QueryOver<BillingDataEntity>().Select(x => x.CustomNumber).OrderBy(a => a.CustomNumber).Desc.Take(1).SingleOrDefault<int>();
私が嫌いなのは、結果を明示的にintにキャストする必要があることと、Query<>バージョンの方が読みやすいことです。私はクエリを完全に間違っていますか、言い換えれば、それを行うためのより良い方法はありますか?
生成されたSQL出力を確認しました。
NHibernate: select billingdat0_.CustomNumber as col_0_0_ from "BillingDataEntity" billingdat0_ order by billingdat0_.CustomNumber desc limit 1
NHibernate: SELECT this_.CustomNumber as y0_ FROM "BillingDataEntity" this_ ORDER BY this_.CustomNumber desc limit @p0;@p0 = 1 [Type: Int32 (0)]
私は正確に何を見ていますか?これは、NHibernateが実際のデータベースクエリにさらに変換する「内部」(メソッド依存)クエリですか?