sort ordenar multiple lista ejemplos desc columns ascending c# generics list lambda sorting

c# - ordenar - Lista<T> Orden por orden alfabético



order by list c# desc (9)

Estoy usando C # en Framework 3.5. Estoy buscando ordenar rápidamente una List<T> genérica List<T> . Por el bien de este ejemplo, digamos que tengo un tipo de lista de una Person con una propiedad de apellido. ¿Cómo ordenaría esta lista usando una expresión lambda?

List<Person> people = PopulateList(); people.OrderBy(???? => ?????)


¿Necesita que la lista se clasifique en su lugar, o simplemente una secuencia ordenada de los contenidos de la lista? Este último es más fácil:

var peopleInOrder = people.OrderBy(person => person.LastName);

Para clasificar en su lugar, necesitaría un IComparer<Person> o un Comparison<Person> . Para eso, es posible que desee considerar ProjectionComparer en MiscUtil .

(Sé que sigo trayendo MiscUtil arriba, solo sigue siendo relevante ...)


Este es un clasificador genérico. Llamado con el interruptor de abajo.

dvm.PagePermissions es una propiedad en mi ViewModel de tipo Lista T en este caso T es una clase de modelo EF6 llamada page_permission.

dvm.UserNameSortDir es una propiedad de cadena en el modelo de vista que contiene la siguiente dirección de ordenación. El que se utiliza en la vista.

switch (sortColumn) { case "user_name": dvm.PagePermissions = Sort(dvm.PagePermissions, p => p.user_name, ref sortDir); dvm.UserNameSortDir = sortDir; break; case "role_name": dvm.PagePermissions = Sort(dvm.PagePermissions, p => p.role_name, ref sortDir); dvm.RoleNameSortDir = sortDir; break; case "page_name": dvm.PagePermissions = Sort(dvm.PagePermissions, p => p.page_name, ref sortDir); dvm.PageNameSortDir = sortDir; break; } public List<T> Sort<T,TKey>(List<T> list, Func<T, TKey> sorter, ref string direction) { if (direction == "asc") { list = list.OrderBy(sorter).ToList(); direction = "desc"; } else { list = list.OrderByDescending(sorter).ToList(); direction = "asc"; } return list; }


Para mí, esta útil guía ficticia: clasificación en lista genérica, funcionó. le ayuda a comprender 4 formas (sobrecargas) para hacer este trabajo con explicaciones muy completas y claras y ejemplos simples

  • Lista.Ordenar ()
  • Lista.Ordenar (Comparación Genérica)
  • List.Sort (IComparer genérico)
  • List.Sort (Int32, Int32, IComparer genérico)

Puedes usar este fragmento de código:

var New1 = EmpList.OrderBy(z => z.Age).ToList();

donde New1 es una List<Employee> .

EmpList es variable de una List<Employee> .

z es una variable de tipo Employee .


Si te refieres a una clasificación in situ (es decir, la lista se actualiza):

people.Sort((x, y) => string.Compare(x.LastName, y.LastName));

Si te refieres a una nueva lista:

var newList = people.OrderBy(x=>x.LastName).ToList(); // ToList optional


También puedes usar

model.People = model.People.OrderBy(x => x.Name).ToList();


puedes usar linq :) usando:

System.linq; var newList = people.OrderBy(x=>x.Name).ToList();


people.OrderBy(person => person.lastname).ToList();


private void SortGridGenerico< T >( ref List< T > lista , SortDirection sort , string propriedadeAOrdenar) { if (!string.IsNullOrEmpty(propriedadeAOrdenar) && lista != null && lista.Count > 0) { Type t = lista[0].GetType(); if (sort == SortDirection.Ascending) { lista = lista.OrderBy( a => t.InvokeMember( propriedadeAOrdenar , System.Reflection.BindingFlags.GetProperty , null , a , null ) ).ToList(); } else { lista = lista.OrderByDescending( a => t.InvokeMember( propriedadeAOrdenar , System.Reflection.BindingFlags.GetProperty , null , a , null ) ).ToList(); } } }