Używam C # na Framework 3.5. Chcę szybko posortować ogólny List<T>
. Na potrzeby tego przykładu załóżmy, że mam listę Person
typu z właściwością nazwiska. Jak posortować tę listę za pomocą wyrażenia lambda?
List<Person> people = PopulateList();
people.OrderBy(???? => ?????)
Czy potrzebujesz posortować listę, czy tylko uporządkowaną sekwencję zawartości listy? To drugie jest łatwiejsze:
Do sortowania w miejscu, to potrzebny jest
IComparer<Person>
alboComparison<Person>
. W tym celu warto rozważyćProjectionComparer
w MiscUtil .(Wiem, że ciągle podnoszę MiscUtil - to po prostu jest aktualne ...)
źródło
List<T>
, ale nie potrzebujesz go, jeśli chcesz tylko iterować.możesz użyć linq :) używając:
źródło
źródło
OrderBy
nie modyfikuj listy, ale zwracają nową „kolekcję” (zwykle leniwąIEnumerable<T>
), którą należy przypisać do czegoś.źródło
dla mnie ten przydatny sztuczny przewodnik - Sortowanie na liście ogólnej - zadziałał. pomaga zrozumieć 4 sposoby (przeciążenia) wykonywania tej pracy, z bardzo kompletnymi i jasnymi wyjaśnieniami i prostymi przykładami
źródło
Możesz użyć tego fragmentu kodu:
gdzie
New1
jestList<Employee>
.EmpList
jest zmiennyList<Employee>
.z
jest zmiennąEmployee
typu.źródło
var
typ.New1
jestList<Employee>
iz
jestEmployee
.Możesz także użyć
źródło
To jest ogólny sorter. Wywoływany za pomocą przełącznika poniżej.
dvm.PagePermissions jest właściwością w moim modelu ViewModel typu List T, w tym przypadku T jest klasą modelu EF6 o nazwie page_permission.
dvm.UserNameSortDir to właściwość string w modelu viewmodel, która przechowuje następny kierunek sortowania. Ten, który jest faktycznie używany w widoku.
źródło