2009-11-18 51 views
2

我有一個Person實體。每個人都有一個國家,我想選擇所有擁有人的不同國家。這個條件查詢返回所有不同CountryID的NHibernate標準查詢 - 選擇加入實體的區別

criteria.SetProjection(Projections.Distinct(Projections.Property("Country"))); 

我如何改變它的加入,獲取國家實體,而不僅僅是ID?

回答

2

任何簡單的方法是使用子查詢。也就是說,您可以在外部查詢中選擇國家/地區ID與內部查詢匹配的整個國家/地區。

Subqueries.PropertyIn(
    "Country", 
    innerDetachedCriteriaWhichFindsCountriesWithPeopleAndProjectsCountryId) 
+0

這將工作,但我沒有一個分離的標準,所以我要麼需要一種方法來將ICriteria轉換成DetachedCriteria或我不能使用此。這個構造函數看起來很有前途,但我不知道要傳入什麼CriteriaImpl DetachedCriteria(NHibernate.Impl.CriteriaImpl,NHibernate.ICriteria) – reach4thelasers 2009-11-18 02:35:28

+0

實際上,你可以換個方式。僅使用DetachedCriteria實例(DetachedCriteria.For ())構建標準,然後使用GetExecutableCriteria(會話)將其轉換爲真實的可執行條件。 – 2009-11-18 05:11:25

+0

這有效,但我不得不花費數小時將所有ICriteria對象更改爲DetachedCriteria對象,然後在需要時將它們附加到會話中。任何其他方式都會引入重複,而我之前曾被錯誤更新過,但我更新了一個而不是另一個。讓我知道是否有人知道如何用ICriteria而不是DetachedCriteria來做到這一點 – reach4thelasers 2009-11-19 02:00:45