sort - order object list c#




Lista<T> Orden por orden alfabético (6)

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

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

puedes usar linq :) usando:

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

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




sorting