menú
¿Música de YouTube sin molestos comerciales? ¡Ahora es posible!
TubeFiesta es una aplicación que te permite reproducir música de YouTube como un reproductor tradicional.
Crear listas, reproducción aleatoria, repetir, y hasta exportar el video a otra pantalla.
Conocer más Ir a tfiesta.com

Orden personalizado con LINQ

Publicado el 01/11/2013 | 1292 visitas

Sabemos que ordenar registros casi siempre se hace por orden alfabético y/o numérico. Con un simple OrderBy(Campo) no podemos modificar el comportamiento que presenta esta característica.

Tuve la necesidad de realizar un ordenamiento desde LINQ pero sin seguir un patrón alfabético o numérico y encontré una forma de realizar un ordenamiento personalizado.

Antes de codificar veamos que necesitamos hacer:

Tenemos una lista de clientes con los siguientes datos:

  • Cedula
  • Nombre
  • Sexo
Donde el sexo puede ser Femenino (F), Masculino (M) o No especificado (N).

Requerimos ordenar nuestra lista de clientes por Sexo de la siguiente manera:

  • Primero Masculinos
  • Segundo Femeninos
  • Tercero No Especificado

Entonces, si hacemos un orden común y corriente, sin importar el tipo de orden que hagamos (ascendente o descendente) no obtendremos los resultados que queremos.

Es en este caso donde necesitamos crear un ordenamiento personalizado, ahora sí lo que nos interesa:

//Nuestra lista de clientes suponiendo que está llena
List<Cliente> listaClientes = new List<Cliente>();

//Aquí ingresamos los caracteres iniciales del campo que queremos ordenar tal y como los queremos ordenar.
var orden = "MFN";

//Creamos el criterio de ordenamiento
var criterio = order.Select((c, i) => new { Letra = c, Orden = i })
    .ToDictionary(o => o.Letra, o => o.Orden);

//Finalmente ordenamos la lista por el criterio
var resultado = listaClientes.OrderBy(item => criterio[item.Sexo[0]]);

Ahora la variable resultado tiene nuestros clientes ya ordenados.

Utiliza resultado.ToList(); para obtener una lista de tipos Cliente.

Talvez te interese...

Tutorial de sockets en c# con ejemplos - Parte 2 - UDP
Tutorial de sockets en c# con ejemplos - Parte 1
[solución] No puede obtener acceso a la página solicitada debido a la configuración de la extensión
[solución] El proveedor de almacenamiento especificado no se encuentra en la configuración
blog comments powered by Disqus