2012-02-14 12 views
2

私は多くのテーブルBを持っているテーブルAを持っていると言います。表Bには1つの表Aしかありません。linqでコレクションのコレクションをフィルタリングする方法は?

今や表Bには名前というプロパティがあります。私はどのようにlinqで次のことをすることができます。

私は、クエリ私は1つの表を望むならばそう

Table B 
Name TableA_Id 
bob 1 
bob 1 
bob 1 
jim 1 
jon 2 

すべての表Bの内部テーブルAを取得し、その後、すべての表Aの表Bに名前がある==「ボブ」をゲットその中に3つのテーブルBオブジェクトがあるオブジェクト。

私は私に予期しない結果を与えているもの、それはコンパイルされませんいずれか、またはそれは(私が思う)多くのテーブルAに戻って、私はこれらのいずれかを行うことはできません

session.Query<TableB>().where(x => x.Name == "bob").select(x => x.TableA) 

session.Query<TableA>().where(x => x.TableB.where(d => d.Name == "bob") // can't do this since it is a collection 

を試してみました。

私はあなたが行うことができると信じて
+0

それは推測だから、私はのみ使用EFとNHibernateはないをしたので、私は答えとしてこれを投稿しませんが、あなたが行うことができます: '.Query ( )。どこか(a => a.TableB.Any(b => b.Name == "bob")) '? – Ocelot20

+0

うーん、これは動作するようです(まだそれをもっとテストしなくてはなりません)。たぶん私はそれをチェックし、すべてのものが戻ってくるという結果が出ると思ったらどんなものか誤解しました。 – chobo2

+0

そうです。ある結果が見つかった場合(この特定のAにはTableB.Name == "bob"が含まれています)、それが含まれます。 "bob"という名前のTableBのないすべてのAは破棄されます。 –

答えて

2

var tableBs = session.Query<TableA>() 
        .Where(a => a.TableBs.Any(b => b.Name == "bob")) 
        .SelectMany(a => a.TableBs); 
関連する問題