Как отсортировать общий список Asc или Desc? - PullRequest
21 голосов
/ 10 февраля 2009

У меня есть универсальная коллекция типа 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();

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

Спасибо

Ответы [ 2 ]

39 голосов
/ 10 февраля 2009

Как насчет:

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

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

33 голосов
/ 10 февраля 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...