你可以找到一个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