Principales respuestas
Ordenamiento de listas

Pregunta
-
Buenos dias a todos !!
Me encuentro con el siguiente problema. Necesito hacer un metodo que reciba una lista (la clase de esta lista va a variar) y 2 parametros (estos parametros son el campo y el sentido de ordenamiento). O sea, necesito un metodo general para ordenar listas genericas.
Intente hacerlo mediante la declaracion List<T> tanto en la devolucion del metodo como en el parametro de entrada, pero me obliga a declarar el tipo de clase que es la lista al llamar al metodo.
Esto es lo que tengo implementado en la vista y funciona:
public ActionResult Index(string campo, string orden) { List<Destinos> destinos = new List<Destinos>(); destinos = Utils.cargaDestinos(); if (campo != null && orden != null) { var propertyInfo = typeof(Destinos).GetProperty(campo); List<Destinos> destord = new List<Destinos>(); if (orden == "ASC") { destord = destinos.OrderBy(x => propertyInfo.GetValue(x, null)).ToList(); } else { destord = destinos.OrderByDescending(x => propertyInfo.GetValue(x, null)).ToList(); } } return View(destord); }
Como puedo hacer el metodo para que pueda llamarlo de una forma asi, teniendo en cuenta que "lista" puede ser de cualquier clase:
var listaOrdenada = OrdenarLista(lista, campo, orden);
Muchas Gracias !
Respuestas
-
El truco esta en poner <T> en el nombre del metodo:
public List<T> OrdenarLista<T>(List<T> lista, string campo, string orden); { List<T> destord = null; if (campo != null && orden != null) { var propertyInfo = typeof(T).GetProperty(campo); if (orden == "ASC") { destord = lista.OrderBy(x => propertyInfo.GetValue(x, null)).ToList(); } else { destord = lista.OrderByDescending(x => propertyInfo.GetValue(x, null)).ToList(); } } return destord; }
- Propuesto como respuesta Jorge TurradoMVP lunes, 10 de septiembre de 2018 16:53
- Marcado como respuesta Pablo RubioModerator miércoles, 12 de septiembre de 2018 16:48
Todas las respuestas
-
El truco esta en poner <T> en el nombre del metodo:
public List<T> OrdenarLista<T>(List<T> lista, string campo, string orden); { List<T> destord = null; if (campo != null && orden != null) { var propertyInfo = typeof(T).GetProperty(campo); if (orden == "ASC") { destord = lista.OrderBy(x => propertyInfo.GetValue(x, null)).ToList(); } else { destord = lista.OrderByDescending(x => propertyInfo.GetValue(x, null)).ToList(); } } return destord; }
- Propuesto como respuesta Jorge TurradoMVP lunes, 10 de septiembre de 2018 16:53
- Marcado como respuesta Pablo RubioModerator miércoles, 12 de septiembre de 2018 16:48
-
El truco esta en poner <T> en el nombre del metodo:
public List<T> OrdenarLista<T>(List<T> lista, string campo, string orden); { List<T> destord = null; if (campo != null && orden != null) { var propertyInfo = typeof(T).GetProperty(campo); if (orden == "ASC") { destord = lista.OrderBy(x => propertyInfo.GetValue(x, null)).ToList(); } else { destord = lista.OrderByDescending(x => propertyInfo.GetValue(x, null)).ToList(); } } return destord; }
Muchas gracias Jorge, voy a probarlo y cualquier cosa te comento los resultados !!!