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();
これを行う簡単な方法はありますか?
ありがとう
どうですか:
estate.Images.OrderByDescending(est => est.IsProfile).ToList()
これにより、IsProfileプロパティで降順で画像が並べ替えられ、その結果から新しいリストが作成されます。
.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)
を使用できます。