public IEnumerable <StudentEntity> GetAll(EvasionFilter evasionFilter)
        {
            var query = DbContext.Student
                        .Include(Student => Student.Person)
                        .Include(Student => Student.ClassRoomStudent)
                        .Include(Student => Student.Presence)
                        .Where(s => s.EvasionScore >= evasionFilter.IntervalMin && s.EvasionScore < evasionFilter.IntervalMax)
                        .AsQueryable();

            if (evasionFilter.IdClassRoom != null)
            {
                query = query.Where(s => s.ClassRoomStudent.Any(i => i.IdClassRoom == evasionFilter.IdClassRoom));
            }

            return(query);
        }
        public IEnumerable <ProgramEntity> GetAllProgram(EvasionFilter evasionFilter)
        {
            var query = DbContext.Program
                        .Include(l => l.ClassRoom)
                        .ThenInclude(t => t.ClassRoomStudent)
                        .ThenInclude(t => t.Student)
                        .Include(l => l.ClassRoom)
                        .ThenInclude(t => t.Period)
                        .Where(l => l.ClassRoom.Any(c => c.ClassRoomStudent.Any(s => s.Student.EvasionScore >= evasionFilter.IntervalMin && s.Student.EvasionScore < evasionFilter.IntervalMax)))
                        .AsQueryable();

            if (evasionFilter.IdCampus.HasValue)
            {
                query = query.Where(l => l.ClassRoom.Any(u => u.IdCampus == evasionFilter.IdCampus));
            }

            query = query.OrderBy(t => t.Name);

            return(query);
        }
        public IEnumerable <StudentEntity> GetAllByClassRoom(EvasionFilter evasionFilter)
        {
            var query = DbContext.Student
                        .Include(l => l.Person)
                        .Include(q => q.ClassRoomStudent)
                        .ThenInclude(StudentClass => StudentClass.ClassRoom)
                        .ThenInclude(Class => Class.Program)
                        .Include(Person => Person.Presence)
                        .Include(u => u.EvasionHistory)
                        .ThenInclude(u => u.ReasonEvasion)
                        .ThenInclude(u => u.Reason)
                        .Where(l => (l.EvasionScore >= evasionFilter.IntervalMin && l.EvasionScore < evasionFilter.IntervalMax))
                        .AsQueryable();

            if (evasionFilter.IdClassRoom.HasValue)
            {
                query = query.Where(l => l.ClassRoomStudent.Any(c => (c.IdClassRoom == evasionFilter.IdClassRoom)));
            }

            return(query.OrderBy(l => l.Person.Name));
        }
        public int GetCountByEvasion(EvasionFilter evasionFilter)
        {
            var query = DbContext.Student
                        .Where(s => s.EvasionScore >= evasionFilter.IntervalMin && s.EvasionScore < evasionFilter.IntervalMax)
                        .AsQueryable();

            if (evasionFilter.IdCampus.HasValue)
            {
                query = query.Include(s => s.ClassRoomStudent)
                        .ThenInclude(c => c.ClassRoom);

                if (evasionFilter.IdClassRoom.HasValue)
                {
                    query = query.Where(s => s.ClassRoomStudent.Any(i => (i.ClassRoom.IdCampus == evasionFilter.IdCampus) && (i.IdClassRoom == evasionFilter.IdClassRoom)));
                }
                else
                {
                    query = query.Where(s => s.ClassRoomStudent.Any(i => i.ClassRoom.IdCampus == evasionFilter.IdCampus));
                }
            }
            else
            {
                query = query.Include(s => s.ClassRoomStudent);

                if (evasionFilter.IdClassRoom.HasValue)
                {
                    query = query.Where(s => s.ClassRoomStudent.Any(i => i.IdClassRoom == evasionFilter.IdClassRoom));
                }
                else
                {
                    query = query.Where(s => s.ClassRoomStudent.Any());
                }
            }

            return(query.Count());
        }