web-dev-qa-db-ja.com

Generic List AscまたはDescを並べ替える方法

MyImageClassタイプのジェネリックコレクションがあり、MyImageClassにはブールプロパティ「IsProfile」があります。 IsProfile == trueがリストの先頭にあるこの汎用リストを並べ替えたいのですが。

私はこれを試しました。

rptBigImages.DataSource = estate.Images.OrderBy(est=>est.IsProfile).ToList();

上記のコードでは、画像はIsProfileプロパティがtrueである最後の位置にあります。しかし、私はそれが最初のインデックスになりたいです。 AscまたはDescが必要です。それから私はこれをしました。

rptBigImages.DataSource = estate.Images.OrderBy(est=>est.IsProfile).Reverse.ToList();

これを行う簡単な方法はありますか?

ありがとう

21
Barbaros Alp

どうですか:

estate.Images.OrderByDescending(est => est.IsProfile).ToList()

これにより、IsProfileプロパティで降順で画像が並べ替えられ、その結果から新しいリストが作成されます。

39
Ray Booysen

.OrderByDescending(...)を使用できますが、LINQメソッドを使用すると、既存のリストを並べ替えるのではなく、新しい順序付きリストを作成することに注意してください。

_List<T>_があり、既存リストの順序を変更したい場合は、Sort()を使用できます。拡張メソッドをいくつか追加することで、より簡単にすることができます。 :

_static void Sort<TSource, TValue>(this List<TSource> source,
        Func<TSource, TValue> selector) {
    var comparer = Comparer<TValue>.Default;
    source.Sort((x,y)=>comparer.Compare(selector(x),selector(y)));
}
static void SortDescending<TSource, TValue>(this List<TSource> source,
        Func<TSource, TValue> selector) {
    var comparer = Comparer<TValue>.Default;
    source.Sort((x,y)=>comparer.Compare(selector(y),selector(x)));
}
_

次に、list.Sort(x=>x.SomeProperty)およびlist.SortDescending(x=>x.SomeProperty)を使用できます。

33
Marc Gravell