Métodos ThenBy y ThenByDescending

Introducción

En este pequeño post vamos a ver como realizar una segunda ordenación de una colección de una forma distinta a través de los métodos extensores ThenBy y ThenByDescending.

 

Definición

Estos métodos extensores van a permitir realizar la ordenación según el campo que indiquemos siempre y cuando la colección ya se encuentre ordenada.

A diferencia de utilizar dos o más ordenaciones a través de los métodos OrderBy, ThenBy va a ordenar los elementos por la segunda categoría indicada en la condición de ordenación y no va eliminar el primer orden definido como si haría el uso del método OrderBy.

Ejemplo

Partiendo de una clase de ejemplo:

   1: public class Coche

   2:    {

   3:        public Coche()  {  }

   4:        public string Marca { get; set; }

   5:        public string Modelo { get; set; }

   6:    }

Y una colección con algunos datos de ejemplo:

   1: List<Coche> coches = new List<Coche>();

   2: coches.Add(new Coche { Marca = "Seat", Modelo = "Ibiza" });

   3: coches.Add(new Coche { Marca = "Seat", Modelo = "Cordoba" });

   4: coches.Add(new Coche { Marca = "Seat", Modelo = "Leon" });

   5: coches.Add(new Coche { Marca = "Seat", Modelo = "Toledo" });

   6:  

   7: coches.Add(new Coche { Marca = "Ford", Modelo = "Focus" });

   8: coches.Add(new Coche { Marca = "Ford", Modelo = "C-Max" });

   9: coches.Add(new Coche { Marca = "Ford", Modelo = "S-Max" });

  10: coches.Add(new Coche { Marca = "Ford", Modelo = "Fiesta" });

Ejemplos:

ThenBy:

   1: coches.OrderBy(a => a.Marca).

   2:     ThenBy(a => a.Modelo).

   3:     ToList().

   4:     ForEach(

   5:         coche => MessageBox.Show(String.Format("{0} - {1}", coche.Marca, coche.Modelo)));

ThenByDescending:

   1: coches.OrderBy(a => a.Marca).

   2:     ThenByDescending(a => a.Modelo).

   3:     ToList().

   4:     ForEach(

   5:         coche => MessageBox.Show(String.Format("{0} - {1}", coche.Marca, coche.Modelo)));

Si ambas ordenaciones son del mismo tipo (ascendente o descendente) a través de una query de LINQ podríamos lograr el mismo resultado:

   1: var query = from Coche c in coches

   2:             orderby c.Marca,c.Modelo

   3:             select c;

Conclusiones

Estos dos métodos extensores son una forma cómoda de llevar a cabo una segunda ordenación sobre un conjunto de elementos sin perder la primera ordenación definida.

 

Un saludo y espero que os sea de utilidad.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *