lunes, 28 de septiembre de 2009

buscando en listas con c#, list.Find o list.FindAll

Tengo en la base de datos todos los feriados, los tengo con año 2000 todos, y en una lista tengo todos los feriados entre en rango de fechas.

Tengo una fecha[en realidad varias] y necesito saber si es un dia feriado o no. por que no pregunto a la base de datos, por que estoy en un bucle, y hacer una consulta por cada dia es muy costoso, asi que me traigo los feriados al inicio del proceso con un rago de tiempo.

Aai que tuve que usar FindAll de la clase List, y usar delegate para esto. esto me retorna una lista con los objetos que coinciden con la condicion aqui el codigo:

var holiday = foo.FindAll(
delegate(Holiday hol){
return (hol.Date.Value.Day == newdateTime.Day
&& hol.Date.Value.Month == newdateTime.Month); });

if (holiday.Count > 0)
log.Info(string.Format("{0} es un feriado", newdateTime));


como todos los feriados se guardan en año 2000 y la fechas que estoy generando puede ser de cualquier año, tengo que preguntar por el mes y el dia, foo, es una lista de Holidays.

Estoy trabajando con el Framework 2, si estuviera con el 3, podria usar lamda, que seria asi.

var holiday= foo.FindAll(
hol => (hol.Date.Value.Day == newdateTime.Day
&& hol.Date.Value.Month == newdateTime.Month));

Tambien hay otra forma, pero aun no la entiendo mucho :(

var bar = public Predicate<holiday> checkHoliday(DateTime date){ return delegate(Holiday item) { return item.Date.Value.Day == date.Day && item.Date.Value.Month == date.Month; };}
foo.FindAll(checkHoliday(newdateTime));
si bien retorna un delegate, en la firma del metodo retona un Predicate, me imagino que hace un cast o algo por el estilo.




--
Atte.
Victor Hugo Saavedra
http://vhspiceros.blogspot.com

4 comentarios:

  1. Crítica constructiva, se escribe "bien", no "vien". ¡¡Saludos!!

    ResponderEliminar
  2. Hola, yo tengo un problema con una lista de nombres, yo recupero un nombre de otro archivo y este nombre es exactamente a uno de los nombres de la lista pero no me lo reconoce, ya use el metodo de Contain pero aun asi no me lo encuentra y no se porque pasa esto...

    ResponderEliminar
  3. Hola Carlos,

    Creo que no te puedo ayudar mucho... no entiendo muy bien cual es tu problema...

    --
    Atte.
    Víctor Hugo Saavedra
    http://vhspiceros.blogspot.com

    ResponderEliminar