2012-09-19 63 views
0

在功能NHibernate,我有一個類A,有孩子的一個IList B.如何根據房產選擇家長和只有一個孩子?

我想選擇所有A的其中有一個小孩B具有一定的性質B == 「foo」 的

我做不想回到A的其他孩子。

什麼是查詢表達式來得到這個?

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

但是,這將返回所有的孩子Bs,而不僅僅是「foo」之一。

回答

1

有一些醜陋的黑客讓它做你想做的事(使用集合上的過濾器),但我不會推薦它。你爲什麼不反向查詢,並做到:

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

它不會做的正是你想要的東西(如果你訪問bAChildBs將會加載該集合),但它會檢索要查找的數據(假設你有一個從B到A的關係)

+0

謝謝你,我還沒有探索過QueryOver - 相當不錯。 –

0

NHibernate將從來沒有檢索一個半加載的集合。

如果要用一個B檢索一個A,請使用投影。

+0

你可以給一個使用投影的例子嗎?我是FNH的新手。 –

相關問題