我可以从ActiveRecord的专家那里获得帮助吗?
我正在寻找HasAndBelongsToMany关系的解决方案。我目前有以下
[HasAndBelongsToMany(Table = "SupplierRecordUrls",ColumnKey = "SupplierID", ColumnRef = "RecordUrlID", Lazy = true, OrderBy="??")]
public virtual IList<RecordUrl> RecordUrls
{
get;
set;
}
如何通过“RecordUrl”中的列来订购上述关系,例如......“Name Asc”。我已尝试直接在RecordUrl类中引用一列,但我收到“找不到列”xxxxxx“错误。
非常感谢任何帮助。
答案 0 :(得分:0)
您可以找到OrderBy in a HABTM relation here。
将Sort添加到您的关系定义中,创建一个实现IComparer的Comparer,并且可以解决这个问题。
在你的代码中,这将给出这样的东西:
[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"
如果它仍然不起作用,您仍然会收到“无法实例化”错误,请尝试使Comparer类保持静态。我不确定它是如何使用的,但是如果它是一个静态调用,那可能就是这个伎俩:)