2012-09-19 68 views
1

一直試圖使用nhibernate HQL或QueryOver獲得以下工作。我正在嘗試獲取實體組織的排序DISTINCT列表,同時對已連接的表進行排序並使用分頁。 實體是(縮短的版本):獨特的分頁列表<Object>按連接表排序

組織

OrganisationId 
Name 
StatusId 
SubstatusId 

地址

AddressId 
OrganisationId 
City 
CountryId 

列表項

ListItemId 
Name 

StatusId,SubstatusId和CountryId是外鍵ListItemId ListItemId是用戶輸入列表編輯選項。 可以有多個地址爲每個組織

排序Organisation.Address [x] .Country.Name我需要包括在選擇,但顯然然後我沒有得到明顯的組織,而不同的組織特定的地址。

我不能那麼進入nHibernate實體,因爲它有另外的Country.Name字段。

另外我不能運行另一個獨特的初始結果作爲即時通訊使用.SetFirstResult和.SetMaxResults做SQL尋呼。 如果我只想要10行,那麼我最初會得到10行不同的(組織+國家/地區名稱)。 當我運行另一個獨特的這將減少,如果一個組織有多個地址。

任何想法如何讓組織明顯的分頁列表,而在Address.Name,Status.Name,SubStatus.Name

排序

回答

0

你可以有2種選擇,有點LINQ的做到這一點:

  1. 做你的投影選擇Organisation.Id,Address.Name,Status.Name,SubStatus.Name,適當地命令他們和分頁的結果(當然,你只需要選擇Organisation.Id)

  2. 做的另一查詢通過Id加載組織的在前面的投影

  3. 合併查詢訂購的組織名單由它們的順序在第一選擇

+0

謝謝,我希望我不會需要做的基礎上,ID的第二負載因爲我會/應該已經擁有了原始選擇所需的所有組織數據,但是我也會從連接的表中獲得額外的數據,所以我可以按此進行排序。因爲數據比實體所期望的要多,所以我無法將數據轉換/轉換爲nHibernate實體。我正在考慮爲組織實體添加排序選項的「隱藏」列,並在聯接表更新時更新這些列。雜亂和冗餘,但速度比標準化數據的優先級高 – Tyrone