2013-03-08 105 views
0

有沒有一種簡單的方法來使用QueryOver嵌套屬性?Nhibernate QueryOver嵌套屬性

例如,我嘗試了這樣的事情;

// SPLAT! 
session.QueryOver<SuperHero>().Where(Expression.Eq("HomeBase.Name", "Bat Cave"); 

它不會工作,因爲它無法解析屬性‘homebase.name’超級英雄。這是有道理的,但有明顯的一些方法,使這項工作,因爲如果我使用舊的「查詢」的做法,我可以得到它的工作就好了,即

// The results I (technically) want. 
sess.Query<SuperHero>().Where(x => x.HomeBase.Name == "The Bat Cave"); 

所以我缺少什麼?我猜測,有些方法可以將表達式等結合起來,以獲得nexted屬性與QueryOver一起使用,但它們是什麼?

+0

您需要明確加入到'HomeBase'表 – 2013-03-08 15:11:42

回答

1

你不能做這樣的一個嵌套的屬性訪問 - you'll紛紛投身到相關表:

session.QueryOver<SuperHero>() 
    .JoinQueryOver(sh => sh.HomeBase) 
     .Where(hb => hb.Name == "Bat Cave"); 

而且你不需要在限制使用字符串 - 這是畢竟使用QueryOver的最大好處之一。

+0

如果我不知道嵌套屬性的類型是什麼? – 2013-03-08 15:42:32

+0

屬性映射的權利?除非我誤解,否則必​​須在映射中指定數據類型。 – 2013-03-08 17:33:58

+0

基本上我有一個表達式樹作爲輸入,將驅動QueryOver的東西,所以我不知道什麼類型是沒有很多額外的工作。 – 2013-03-08 21:22:27