0

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

(Column = Name、Operator = Like、Value =%John%)のようなクエリを作成する必要があります

        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 >();

それとももっと良い解決策がありますか?

ご協力いただきありがとうございます。

よろしく、トーマス

4

2 に答える 2

0

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

于 2011-01-09T12:51:58.483 に答える
0

どちらでも使用できます。両者の違いはほとんどないかもしれません。ただし、列名が定数であるか、列名にマップされていることを確認してください。そうでない場合、リポジトリはモデル定義に緊密に結合されます。つまり、列名を更新する場合は、これらのステートメントを自分で更新する必要があります。

そして、where句を作成しているときに、適切なクエリを追加する関数があることを確認します。おそらく、同じためのswitchcaseステートメントがあります。

于 2011-01-09T12:56:11.770 に答える