你可以找到一個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"
如果仍然無法正常工作,你仍然得到「無法實例化」的錯誤,嘗試使比較器類的靜態。我不確定它是如何使用的,但如果它是一個靜態調用,那可能會訣竅:)
OrderBy需要SQL,而不是HQL/NHibernate/ActiveRecord。也許你指定一個屬性名稱而不是SQL列名稱? – 2010-12-14 00:52:49