Ordenaciones personalizadas con LINQ

by Valeriano Tortola 13. septiembre 2008 04:39

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

Mas...

Tags:

C# 3.0 | .NET 3.5

Update-Select en un DataTable con LINQ

by Valeriano Tortola 12. septiembre 2008 03:30

Últimamente ya no escribo nada, estoy totalmente inmerso en el mundo LINQ con el C# 3.0 y LINQ de Octavio Hernandez y el LINQ en Action ... y poco hay que contar que no este en libros ó en los cientos de blogs que llevan escribiendo sobre LINQ desde hace mucho tiempo. Aún asi por lo menos iré escribiendo alguna cosilla sobre LINQ aunque solo sea para que no se me olvide como hacer ciertas cosas y tener que volverlas a buscar :P

Este es un ejemplo simple de como lanzar una consulta Update-Select con LINQ sobre un DataTable, apoyandonos en el ya famoso método extensor ForEach ... (que según me ha comentado un compañero es posible que aparezca en la BCL próximamente), lo que hace es en cada DataRow que cumple con las condiciones dadas introduce en la columna "Initial" la primera letra del nombre... (nada complicado vamos xD)

EmployeesTable.AsEnumerable()
   .Where(EmployeeRow => !EmployeeRow.IsNull("Country") && 
                  EmployeeRow.Field<String>("Country") == "UK" &&
                  !EmployeeRow.IsNull("FirstName") &&
                  EmployeeRow.Field<String>("FirstName") != String.Empty)
   .ForEach(EmployeeRow => EmployeeRow.SetField<String>("Initial", 
                                EmployeeRow.Field<String>("FirstName").Substring(0, 1)));

También empezaré ahora a escribir sobre WPF... que me toca ponerme las pilas :D

Tags: ,

C# 3.0 | .NET 3.5