2012-10-17 194 views
1

我正在學習Fluent nHibernate的過程。我在構建與我在網上找到的經典示例不太一樣的查詢時遇到了問題。通常,我發現這個例子:Fluent Nhibernate QueryOver並加入

IQueryOver<Cat,Cat> catQuery = 
    session.QueryOver<Cat>(() => catAlias) 
     .JoinAlias(() => catAlias.Kittens,() => kittenAlias) 
     .Where(() => catAlias.Age > 5) 
     .And(() => kittenAlias.Name == "Tiddles"); 

所以,從我在這個例子中理解上的小貓接合後正在返回一個貓的對象,然後使用小貓的名字和貓的年齡過濾。由於Cat對象有一個名爲Kittens的屬性,因此連接起作用。

的什麼,我試圖做的是這樣一個例子:

Forest f = null; 
Tree t = null; 

ForestsFound = session.QueryOver<Forest>(() => f) 
        .JoinAlias(() => t.Forest,() => f) 
        .Where(() => t.NumberOfTrees > 1000) 
        .List<Forest>() 
        .ToList<Forest>(); 

一個森林本質上是一個查找表,它是有一個鏈接到該樹是,但我什麼森林樹想要返回一個清晰的森林列表。因此,在常規的SQL它會是什麼樣子:

select f.* 
from Forest f 
    inner join Tree t 
     on t.Forest_id = f.ID 
where t.NumberOfTrees > 1000 

回答

1

如果從森林的關係 - >樹,那麼你可以這樣做:爲別人讀這

Forest f = null; 
Tree t = null; 

ForestsFound = session.QueryOver<Forest>(() => f) 
    .JoinAlias(() => f.Trees,() => t) 
    .Where(() => t.NumberOfTrees > 1000) 
    .List<Forest>(); 
+0

剛一說明,看起來像它的不可能按照我嘗試的方式這樣做,您必須調整映射以包含與其他類的HasMany關係 –

+1

您可以在沒有HasMany關係的情況下執行此操作,但需要使用子查詢 –