En zues estamos medios fritos por el tema de hibernate, que trae una lista muy grande y hay que filtrarla, cuando no hay un hql que se adapte a lo que necesitamos.
Hay una forma de recorrer menos las listas, usando Delegate
para buscar en mi blog puse un post. aqui lo dejo.
Ahora necesita eliminar datos de una lista, que cumpleran con x condiciones, tenia que recorrer dos listas, lo cual es bastante costoso aqui el codigo.
List<int> positions = new List<int>();int pos = 0;foreach (var portitem in laytimeCalculation.PortItems){ pos = 0; positions.Clear(); foreach (var item in portitem.DetailItems.Items){ if (item.DeductActivity != null && item.DeductActivity.ToUpper().Trim() == "Vessel on Demurrage".ToUpper().ToUpper()) positions.Add(pos); pos++; } foreach (var i in positions){ portitem.DetailItems.Items.RemoveAt(i); }}Usando un delegate y el metodo deleteAll de las listas, asi solo recorremos solo una vez las listas.
var array = portitem.DetailItems.Items as List<LaytimeCalculationItem>;if (array != null) array.RemoveAll( delegate(LaytimeCalculationItem item){ return (item.DeductActivity != null && item.DeductActivity.ToUpper().Trim().Equals("Vessel on Demurrage".ToUpper())); } );Es mas podriamos dejarla en una sola linea aunque sea mas dificil de leer
array.RemoveAll(delegate(LaytimeCalculationItem item){return (item.DeductActivity != null && item.DeductActivity.ToUpper().Trim().Equals("Vessel on Demurrage".ToUpper()));});Otra cosa importante es que podemos usar lambda, pero lamentamente no es proyecto, ya que compilamos en el framework 2, y lambda es del 3.
0 comentarios:
Publicar un comentario en la entrada