2011-01-09 11 views
0

私のアプリケーションでは、ユーザーは検索条件を定義できます。彼は列を選択したり、演算子を設定したり(等しい、等しい、より小さい、等しい、等)、値を与えることができます。ユーザーがボタンをクリックすると、アプリケーションは条件付きでデータベースを検索します。私はNHibernateを使用し、今私に尋ねる、NHibernateでこれを行うための最も効率的な方法は何ですか。NHibernate - 条件を定義する

は、私は同じようにしてクエリを作成する必要があります(カラム=名、演算子=と同様に、値=%ジョン%)

 var a = session.CreateCriteria<Customer>(); 
     a.Add(Restrictions.Like("Name", "%John%")); 
     return a.List<Customer>(); 

または私はHQLでこれを行う必要があります。

 var q = session.CreateQuery("from Customer where " + where); 
     return q.List<Customer >(); 

かよりベターの解決策はありますか?

ありがとうございました。

トマス

+0

あなたが人々の回答を受け入れるなら、誰かがあなたを助けると確信しています。 – Phill

+0

こんにちはフィル - 私は見ているだけで、私は答えをマークする必要があります。今私は他の質問のためにそれをしています。私は、これは受け入れ率を高めるだろうと思う? - もっとやりたいことがありますか?ありがとう! – BennoDual

答えて

0

いずれか1つを使用できます。両者の違いはほとんどないかもしれません。ただし、列名が定数であるか、列名にマッピングされているかを確認する必要があります。そうしないと、リポジトリがモデル定義に密接に結合されます。つまり、列名を更新すると、

where節を作成するときに、正しいクエリを追加する関数を作成することができます。あなたはおそらくスイッチ事例を同じものにしているでしょう。

0

効果の点では違いはありません。 HQLバージョンでは、where部分を文字列として追加するのではなく、パラメータを使用することをお勧めします。 NH3.0を使用している場合は、文字列を使用してプロパティを記述しないように、QueryOverの使用を検討することもできます。

+0

こんにちはFelice - これは "パラメータを使用する"という意味ですか?全体のどこにパラメータを定義できますか? – BennoDual

+0

あなたの答えについてもう1つ質問:NH3.0を使用していますか? - それは今公式に公開されていますか? 2.1から3.0にアップデートする大きな努力はありますか? – BennoDual

+0

"where myprop =:p0"というhqlを記述し、SetParameter( "p0"、myval)を呼び出すことができます。これは常に良い方法です。 NH3.0の質問については、正式にリリースされています。アップデートは大したことではありませんが、もし私があなただったら、まだいくつかのバグ修正を待つでしょう;) –

関連する問題