0

안녕하세요, ActiveRecord의 전문가로부터 도움을받을 수 있습니까?OrderBy In HasAndBelongsToMany 관계

나는 HasAndBelongsToMany 관계에 대한 해결책을 찾고있다. 나는 현재 예 ... "이름 오름차순"에 대한, 내가 "RecordUrl"의 열을 기준으로 위의 관계를 주문하려면 어떻게해야 다음

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

있습니다. 나는 클래스 RecordUrl에 직접 열을 참조하는 시도했지만 나는 "열을 찾을 수 없습니다"XXXXXX "오류가 발생합니다.

어떤 도움이 많이 감사합니다.

+0

OrderBy는 HQL/NHibernate/ActiveRecord가 아닌 SQL을 사용합니다. SQL 컬럼 이름 대신 프로퍼티 이름을 지정하셨습니까? –

답변

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를 RecordUrl의 내부 클래스로 만듭니다.

  • 변경 정렬하려면 : Sort = "MyProject.Supplier.RecordUrl$RecordUrlComparer, MyProject.Supplier.RecordUrl"

가 여전히 작동하지 않으면, 당신은 여전히 ​​"인스턴스화 할 수 없습니다"오류의 비교 자 클래스는 정적 시도해보십시오. 어떻게 사용되는지는 확실치 않지만 정적 호출 인 경우 트릭을 수행 할 수 있습니다.

+0

안녕 얘들 아 응답 주셔서 감사합니다! 내가 지시 한대로 IComparer를 설정하고 URL의 오름차순 순서를 비교하려고 시도합니다. 예를 들어 새로운 System.Collections.Comparer (System.Globalization.CultureInfo.CurrentCulture)를 반환합니다 .Compare (x.Url, y.Url); 또한 Sort = "MyProject.RecordUrlNameComparer, MyProject.RecordUrl"을 HABTM 특성에 추가했지만 정렬 매개 변수를 무시하는 것으로 보입니다. –

+0

정렬! = OrderBy. 정렬은 클라이언트 측에서 일어나고 OrderBy는 서버 측에서 발생합니다. –

+0

OrderBy를 사용하고 있지 않습니다. Sort를 사용하고 있습니다. 그러나 다음과 같은 오류가 발생합니다. 비교기 클래스 [MyProject.RecordUrl.RecordUrlComparer, MyProject.RecordUrl]을 인스턴스화 할 수 없습니다. MyProject.Supplier.RecordUrls - 모든 아이디어 ?? –