vtortola.NET Logo
Ordenaciones personalizadas con LINQ

Ordenaciones personalizadas con LINQ

por vtortola viernes, 12 de septiembre de 2008

Esta mañana necesitaba ordenar los elementos de una tabla en función de uno de los campos, pero el problema era que la comparación no era alfabética ni similar, era en función de unos criterios propios; uno de los parámetros que aceptan los métodos extensores OrderBy, OrderByDescending, ThenBy and ThenByDescending es un IComparer<>, probé y funcionó, asignaba un peso a cada valor y luego comparaba en el método Compare los pesos de los dos parámetros de entrada, pero aún asi no me gustaba como quedaba, no me gustaba lo de tener que escribir una clase solo para este propósito... buscaba algo más... compacto... asi que con ayuda de mi compañero use un delegado anónimo primero que directamente devolvia el peso en TKey inferido como Int32, que es en lo que LINQ basaria la ordenación y luego lo substituí por una expresión lambda; es realmente interesante como LINQ te facilita la vida :D

Este pequeño ejemplo ordena un DataTable en función de su columna "Country" asignando a cada valor un peso en Int32 y siendo este peso el que devuelve la expresión infiriendo TKey como Int32, que será en lo que LINQ base ordenación de los elementos. Anotar que el elemento que queramos que tenga más relevancia debe ser el de menos peso y el que menos el que más peso:

DataTable EmployeesByCountry = 
            EmployeesTable.AsEnumerable()
            //.OrderBy(delegate(DataRow Employee)
            .OrderBy(Employee =>
                {
                    switch(Employee.Field<String>("Country"))
                    {
                        case "Denmark":return 3;
                        case "France":return 2;
                        case "Ireland":return 4;
                        case "Spain":return 1;
                        case "UK":return 5;
                        default: return Int32.MaxValue;
                    }
                }).CopyToDataTable();

Aún así estoy seguro que habrá formas mejores y más sencillas de hacerlo. Evidentemente es mejor si tenemos un algorritmo que calcule el peso en lugar de tener que fijarlos "a capón" ... pero hay situaciones... que no hay más remedio :D

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

C# 3.0 | .NET 3.5

Related posts

Agregar comentario


(Mostrará tu Gravatar ícono)  

  Country flag





Live preview

noviembre 22. 2008 02:27

Gravatar

Powered by BlogEngine.NET 1.1.1.8
This theme is a variation of Mads Kristensen by Valeriano Tórtola

Valeriano Tórtola

Personal Ver perfil
E-mail Enviar correo
LinkedIn LinkedIn
Fotos Fotos
MCPD

Publicidad

Posts recientes

Disclaimer

Las opiniones mostradas aqui son mis opniones y no representan el punto de vista de mi empresa en ninguna forma.

Creative Commons License

Esta obra está bajo una licencia de Creative Commons

Locations of visitors to this page

© Copyright 2008

Sign in

Calendario

<<  noviembre 2008  >>
lumamijuvido
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

Ver en calendario extendido