C # list.Orderby malejąco

150

Chciałbym otrzymać listę posortowaną malejąco według „Product.Name” .

Podobnie jak w przypadku poniższej funkcji, która sortuje listę w porządku rosnącym, tylko w odwrotnej kolejności, czy jest to możliwe?

var newList = list.OrderBy(x => x.Product.Name).ToList();
PFranczyza
źródło
Czy problem może polegać na tym, że toListzamiast tego napisałeś ToList?
Mark Byers
1
Myślę, że miał na myśli, że nie akceptuje descendingsłowa kluczowego, ponieważ nie zaczynał wyrażeniafrom x in list...
StriplingWarrior
1
Przepraszam, nie skopiowałem dokładnie tego kodu, ale wpisałem go z pamięci. Mój rzeczywisty kod działa, ale po prostu zwraca listę posortowaną w kolejności rosnącej.
PFranchise

Odpowiedzi:

260

Pewnie:

var newList = list.OrderByDescending(x => x.Product.Name).ToList();

Doc: OrderByDescending (IEnumerable, Func) .

W odpowiedzi na Twój komentarz:

var newList = list.OrderByDescending(x => x.Product.Name)
                  .ThenBy(x => x.Product.Price)
                  .ToList();
StriplingWarrior
źródło
2
Więc twoja edycja zostanie posortowana według nazwy (od z-> a), a następnie ceny (niska -> wysoka)?
PFranchise
11
Tak to jest poprawne. Wywołania do OrderBy lub ThenBy są zawsze rosnące. Metody OrderByDescending i ThenByDescending są tym, czego używasz do malejącej.
StriplingWarrior
11
list.OrderByDescending();

pracuje dla mnie.

Tablet
źródło
4
To nic nie dało bez wykonania list = list.OrderByDescending (). ToList ();
Almo
8
var newList = list.OrderBy(x => x.Product.Name).Reverse()

To powinno wystarczyć.

Beedjees
źródło
1

spójrz na ten fragment kodu z mojego projektu

Próbuję zmienić kolejność listy na podstawie właściwości w moim modelu,

 allEmployees = new List<Employee>(allEmployees.OrderByDescending(employee => employee.Name));

ale napotkałem problem, gdy a small and capital letters exist, więc aby go rozwiązać, użyłem funkcji porównującej ciąg.

allEmployees.OrderBy(employee => employee.Name,StringComparer.CurrentCultureIgnoreCase)
Basheer AL-MOMANI
źródło
-2
list = new List<ProcedureTime>(); sortedList = list.OrderByDescending(ProcedureTime=> ProcedureTime.EndTime).ToList();

Co działa w moim przypadku, aby pokazać czas posortowany w porządku malejącym.

Archana
źródło