0

Fluent NHibernateには、クラスAがあり、子BのIListがあります。

特定のプロパティB=="foo"を持つ子Bを持つすべてのAを選択したい

私はAの他の子供たちを取り戻したくありません。

これを取得するためのQuery式は何ですか?

var list = session.Query<A>()
  .FetchMany(a=>a.B)
  .Where( a=>childBs.Any(b=>b=="foo"));

しかし、それは「foo」のものだけでなく、すべての子Bを返します。

4

2 に答える 2

1

(コレクションのフィルターを使用して)必要な処理を実行するための醜いハックがいくつかありますが、お勧めしません。クエリを逆にして実行してみませんか。

var list = session.QueryOver<B>()
             .Where(b => b.B == "foo")
             .Fetch(b => b.A).Eager
             .List();

それはあなたが望むことを正確には行いません(bAChildBsにアクセスすると、そのコレクションがロードされます)が、探しているデータを取得します(BからAの関係があると仮定します)

于 2012-09-19T15:53:18.170 に答える
0

NHibernateは、半分ロードされたコレクションを取得することはありません。

1つのAと1つのBを取得する場合は、プロジェクションを使用します。

于 2012-09-19T15:45:58.237 に答える