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.