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();
}
}
}