0

嗨,我可以從ActiveRecord的專家那裏獲得幫助嗎?OrderBy In HasAndBelongsToMany Relation

我正在尋找HasAndBelongsToMany關係的解決方案。目前,我有以下

[HasAndBelongsToMany(Table = "SupplierRecordUrls",ColumnKey = "SupplierID", ColumnRef = "RecordUrlID", Lazy = true, OrderBy="??")] 
    public virtual IList<RecordUrl> RecordUrls 
    { 
     get; 
     set; 
    } 

如何訂購由列「RecordUrl」上述關係,例如......「名稱ASC」。我曾嘗試直接在類RecordUrl引用列,但我收到「找不到列‘XXXXXX’的錯誤。

任何幫助深表感謝。

+0

OrderBy需要SQL,而不是HQL/NHibernate/ActiveRecord。也許你指定一個屬性名稱而不是SQL列名稱? – 2010-12-14 00:52:49

回答

0

你可以找到一個OrderBy in a HABTM relation here

添加排序你的關係定義,創建一個實現IComparer的比較器和會做的伎倆

在你的代碼,這將使財產以後這樣的:

[HasAndBelongsToMany(Table = "SupplierRecordUrls",ColumnKey = "SupplierID", ColumnRef = "RecordUrlID", Lazy = true, Sort="MyProject.RecordUrlNameComparer, MyProject.RecordUrl")] 
public virtual IList<RecordUrl> RecordUrls 
{ 
    get; 
    set; 
} 

有了:

public class RecordUrlNameComparer: IComparer<RecordUrl> 
{ 
    Int32 System.Collections.Generic.IComparer<RecordUrl>.Compare(RecordUrl x, RecordUrl y) 
    { 
     return new System.Collections.Comparer(System.Globalization.CultureInfo.CurrentCulture).Compare(x.Name, y.Name); 
    } 
} // public class RecordUrlNameComparer: IComparer<RecordUrl> 

我讓你讀文章:)

編輯:現在

你的錯誤是:Could not instantiate comparator class [MyProject.RecordUrl.RecordUrlComparer, MyProject.RecordUrl] for collection MyProject.Supplier.RecordUrls

我會怎麼做:

  • 創建Comparer作爲RecordUrls的內部類。

  • 更改排序到:Sort = "MyProject.Supplier.RecordUrl$RecordUrlComparer, MyProject.Supplier.RecordUrl"

如果仍然無法正常工作,你仍然得到「無法實例化」的錯誤,嘗試使比較器類的靜態。我不確定它是如何使用的,但如果它是一個靜態調用,那可能會訣竅:)

+0

嘿,你好,謝謝你的迴應!我已經按照你的指示設置了IComparer,並試圖比較URL的升序,例如返回新的System.Collections.Comparer(System.Globalization.CultureInfo.CurrentCulture).Compare(x.Url,y.Url);我還向HABTM屬性添加了Sort =「MyProject.RecordUrlNameComparer,MyProject.RecordUrl」,但它似乎忽略了sort參數的任何建議? – 2010-12-14 02:01:03

+0

Sort!= OrderBy。 Order發生在客戶端,OrderBy發生在服務器端。 – 2010-12-14 05:02:53

+0

我不使用OrderBy我使用排序,但我收到以下錯誤:無法實例化比較器類[MyProject.RecordUrl.RecordUrlComparer,MyProject.RecordUrl]集合MyProject.Supplier.RecordUrls - 任何想法?? – 2010-12-14 05:38:57