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"

それはまだ動作しない場合、あなたはまだ「インスタンス化できませんでした」というエラーを取得し、はComparerクラスは静的作ってみてください。私はそれがどのように使用されているかはわかりませんが、静的な呼び出しの場合、それはトリックを行うかもしれません:)

+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.Supplier.RecordUrlsコレクションのComparatorクラス[MyProject.RecordUrl.RecordUrlComparer、MyProject.RecordUrl]をインスタンス化できませんでした。 –