Подтвердить что ты не робот

Как сортировать общий список 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();

Есть ли более простой способ сделать это?

Спасибо

4b9b3361

Ответ 1

Как насчет:

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

Это упорядочивает изображения в порядке убывания по свойству IsProfile и затем создает новый список из результата.

Ответ 2

Вы можете использовать .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).