0

Привет, я могу получить помощь от эксперта в ActiveRecord?OrderBy In A HasAndBelongsToMany Связь

Я ищу решение для отношения 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? –

ответ

0

Вы можете найти OrderBy in a HABTM relation here.

Добавить Сортировать к вашему определению отношения, создать компаратор, который реализует IComparer и что будет делать трюк

в своем коде, который даст Somthing так:.

[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> 

я позволю вам прочитать статью :)

Edit:

Ваша ошибка теперь: 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 статичным. Я не уверен, как он используется, но если это статический вызов, это может сделать трюк :)

+0

Эй, ребята, спасибо за ответы! Я установил IComparer, как вам было поручено, и попытался сравнить URL в порядке возрастания, например, вернуть новый System.Collections.Comparer (System.Globalization.CultureInfo.CurrentCulture) .Compare (x.Url, y.Url); Я также добавил Sort = "MyProject.RecordUrlNameComparer, MyProject.RecordUrl" в атрибут HABTM, но он, кажется, игнорирует параметр sort для любых предложений? –

+0

Сортировать: = OrderBy. Сортировка происходит на стороне клиента, OrderBy происходит на стороне сервера. –

+0

Я не использую OrderBy Я использую Сортировку, но я получаю следующую ошибку: Не удалось создать класс компаратора [MyProject.RecordUrl.RecordUrlComparer, MyProject.RecordUrl] для коллекции MyProject.Supplier.RecordUrls - Любые идеи? –