1

where句をNHibernateクエリに動的に追加することは可能ですか?

ループスルーして、必要に応じて、つまりユーザーが複数の検索条件を入力した場合にWhere句を追加する必要がある句のコレクションがあります。

次のように、問題なく単一のクエリを記述できます。「a」で始まるすべての名前を取得します。

IEnumerable<Customer> customers = nHibernateSession.Query<Customer>().Where(x => x.Name.StartsWith("a")).ToList();

しかし、これに別のwhere句を追加する方法がわかりません。事実上、次のようなものが必要です。

foreach (clauses in SelectionClauses)
{
    //add a .Where(Clause) to The Session.Query
}

nHibernateSession.Queryをこのように使用することはできないと思います...これを行う方法を知っている人はいますか?

4

1 に答える 1

1

次のようにして、Linq プロバイダー (session.Query) でこれを行うことができます。

var query = session.Query<MyClass>();

foreach(var clause in clauses)
    query = query.Where(clause.BuildExpression());

たとえば、 BuildExpression が Expression> を返す場所

ただし、プロパティに文字列名を使用している場合、これは面倒になる可能性があり、session.QueryOver または session.CreateCriteria を使用して結果を得るのがはるかに簡単になります。どちらも、式ではなく名前によるプロパティのクエリをサポートしています。

于 2012-10-12T13:48:18.773 に答える