Tengo una consulta que se está ejecutando lentamente (en un bucle de aproximadamente 100 tarda de 5 a 10 segundos) y no tengo ni idea de por qué. Simplemente se trata de consultar una Lista de objetos ... ¡tu ayuda es muy apreciada!Slow LINQ Query
Básicamente estoy preguntando por los horarios que se han asignado a los administradores específicos. Debe ser desde la semana de turnos especificada O los primeros 2 días de la semana siguiente O los 2 últimos días de la semana anterior.
Intenté calcular .AddDays antes, pero eso no ayudó. Cuando ejecuté una prueba de rendimiento, destacó la declaración "de" a continuación.
List<Schedule> _schedule = Schedule.GetAll();
List<Shift> _shifts = Shift.GetAll();
// Then later...
List<Schedule> filteredSchedule = (from sch in _schedule
from s in _shifts
where
**sch.ShiftID == s.ShiftID
& (sch.ManagerID == 1 | sch.ManagerID == 2 | sch.ManagerID == 3)
& ((s.ScheduleWeek == shift.ScheduleWeek)
| (s.ScheduleWeek == shift.ScheduleWeek.AddDays(7)
& (s.DayOfWeek == 1 | s.Code == 2))
| (sch.ScheduleWeek == shift.ScheduleWeek.AddDays(-7)
& (s.DayOfWeek == 5 | s.Code == 6)))**
select sch)
.OrderBy(sch => sch.ScheduleWeek)
.ThenBy(sch => sch.DayOfWeek)
.ToList();
En primer lugar, gracias Jon! Lo tuve en cortocircuito antes, pero no noté la diferencia. Sin embargo, ¡el uso de "join" en vez de "where" funcionó! Nunca supe que LINQ trató el 2 de manera diferente. En segundo lugar - ¡guau! ¡Siento que acabo de recibir ayuda de una celebridad! :) Nunca leí tu libro, pero lo he visto muchas veces. Sin embargo, puedes estar seguro de que voy a recoger una copia ahora. :) p.s. si alguna vez buscas un desarrollador, ¡házmelo saber! es decir, ¡coautor de su próximo libro! jaja – jon