OrderBy In HasAndBelongsToMany Relation - PullRequest
       18

OrderBy In HasAndBelongsToMany Relation

0 голосов
/ 14 декабря 2010

Привет, могу ли я получить помощь от эксперта в ActiveRecord?

Я ищу решение для отношения HasAndBelongsToMany. В настоящее время у меня есть следующее

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

Как упорядочить вышеуказанное отношение по столбцу в «RecordUrl», например ... «Имя Asc». Я пытался ссылаться на столбец непосредственно в классе RecordUrl, но получаю сообщение об ошибке «не удается найти столбец» xxxxxx ».

Любая помощь очень ценится.

1 Ответ

0 голосов
/ 14 декабря 2010

Вы можете найти OrderBy в отношении HABTM здесь .

Добавьте Sort к определению вашего отношения, создайте Comparer, который реализует 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"

Если это все еще не работает, вы по-прежнему получаете ошибку «не удалось создать экземпляр», попробуйте сделать класс Comparer статическим. Я не уверен, как он используется, но если это статический вызов, это может сработать :))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...