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