2

DI を使用したリポジトリ パターンで NHibernate を使用して、柔軟性を維持しています。関連するインターフェイスで、ICriterion のようなベンダー固有のものを公開したくありません。しかし、クエリ クラスが .Where 句に入れることができるデリゲートを受け入れるようにしたいと考えています。

次のようなものが必要です:

public IEnumerable<MyClass> Execute(Func<MyClass, bool> selector)
{
    return session
        .QueryOver<MyClass>()
        .Where(selector)
        .....
}

これを達成する方法はありますか、それとも間違った方法で行っていますか?

4

1 に答える 1

0

あなたは間違った道を進んでいません。あなたのコードはうまくいくと思います。あなたの問題は、フィルタリングが行われるメモリ内のすべてのテーブルを取得することです。

これにより、SQL に変換できる基準の DB レベルでのフィルタリングが有効になるはずです。

public IEnumerable<MyClass> Execute(Expression<Func<MyClass, bool>> selector)
{
    return session.Query<MyClass>().Where(selector).ToList();
}

これもうまくいくはずです:

public IEnumerable<MyClass> Execute(Expression<Func<MyClass, bool>> selector)
{
    return session.QueryOver<MyClass>().Where(selector).ToList();
}

これが役立つことを願っています

于 2013-02-23T16:07:02.557 に答える