//--------------------------------------------------------------------------------------- private void Filter(ActorIndexDto actorsForIndex) { if (actorsForIndex.Countries.Length != 0) { foreach (var country in actorsForIndex.Countries) { actorsForIndex.Actors = actorsForIndex.Actors.Intersect(actorsForIndex.Actors.Where(a => a.Country == country), new ActorDtoComparer()); } } IEnumerable <ActorDto> filter; if (actorsForIndex.Gender != null) { filter = actorsForIndex.Actors.Where(m => m.Gender == actorsForIndex.Gender) .Where(m => m.BornDate.Year >= actorsForIndex.YearMin && m.BornDate.Year <= actorsForIndex.YearMax); //actorsForIndex.Actors = filter.Where(m => m.Grades.Any()) // .Where(m => m.Grades // .Average(m => m.GradeValue) >= actorsForIndex.GradeMin && m.Grades // .Average(m => m.GradeValue) < actorsForIndex.GradeMax + 1); // .Union(filter.Where(a => a.Grades.Any() == false)); } else { filter = actorsForIndex.Actors.Where(m => m.BornDate.Year >= actorsForIndex.YearMin && m.BornDate.Year <= actorsForIndex.YearMax); //actorsForIndex.Actors = filter.Where(m => m.Grades.Any()) // .Where(m => m.Grades // .Average(m => m.GradeValue) >= actorsForIndex.GradeMin && m.Grades // .Average(m => m.GradeValue) < actorsForIndex.GradeMax + 1); // .Union(filter.Where(a => a.Grades.Any() == false)); } actorsForIndex.Actors = filter.Where(m => m.Grades.Any()) .Where(m => m.Grades .Average(m => m.GradeValue) >= actorsForIndex.GradeMin && m.Grades .Average(m => m.GradeValue) < actorsForIndex.GradeMax + 1); if (actorsForIndex.GradeMin == 0) { actorsForIndex.Actors = actorsForIndex.Actors.Union(filter.Where(a => a.Grades.Any() == false)); } //actorsForIndex.Actors = actorsForIndex.Gender != null ? actorsForIndex.Actors.Where(m => m.Gender == actorsForIndex.Gender) // .Where(m => m.BornDate.Year >= actorsForIndex.YearMin && m.BornDate.Year <= actorsForIndex.YearMax)//; // .Where(m => m.Grades.Any()) // .Where(m => m.Grades // .Average(m => m.GradeValue) >= actorsForIndex.GradeMin && m.Grades // .Average(m => m.GradeValue) < actorsForIndex.GradeMax + 1) // : actorsForIndex.Actors.Where(m => m.BornDate.Year >= actorsForIndex.YearMin && m.BornDate.Year <= actorsForIndex.YearMax)//; // .Where(m => m.Grades.Any()) // .Where(m => m.Grades // .Average(m => m.GradeValue) >= actorsForIndex.GradeMin && m.Grades // .Average(m => m.GradeValue) < actorsForIndex.GradeMax + 1); //return actorsForIndex; }
public ActorIndexDto GetAllForIndex(GenderDto?gender, int yearMin, int yearMax, int gradeMin, int gradeMax, string[] countries, string sortOrder, int?pageNumber, int pageSize = 5) { ActorIndexDto actorsForIndex = new ActorIndexDto() { Actors = _actorRepository.GetAll().ProjectTo <ActorDto>(_mapper.ConfigurationProvider).AsEnumerable(), GradeMin = gradeMin, GradeMax = gradeMax == 0 ? 10 : gradeMax, YearMax = yearMax == 0 ? 2100 : yearMax, YearMin = yearMin == 0 ? yearMax : yearMin, Gender = gender, Countries = countries, SortOrder = sortOrder, PageNumber = pageNumber, PageSize = pageSize }; Filter(actorsForIndex); Sort(actorsForIndex); actorsForIndex.PaginatedActors = PaginatedList <ActorDto> .Create(actorsForIndex.Actors.AsQueryable(), pageNumber ?? 1, pageSize); return(actorsForIndex); }
private void Sort(ActorIndexDto actorsForIndex) { switch (actorsForIndex.SortOrder) { case "nameDesc": actorsForIndex.Actors = actorsForIndex.Actors.OrderByDescending(m => m.LastName); break; case "bornDesc": actorsForIndex.Actors = actorsForIndex.Actors.OrderByDescending(m => m.BornDate); break; case "born": actorsForIndex.Actors = actorsForIndex.Actors.OrderBy(m => m.BornDate); break; case "gradeDesc": actorsForIndex.Actors = actorsForIndex.Actors.Where(m => m.Grades.Any()).OrderByDescending(m => m.Grades.Average(k => k.GradeValue)).Union(actorsForIndex.Actors); break; case "grade": actorsForIndex.Actors = actorsForIndex.Actors.Where(m => m.Grades.Any()).OrderBy(m => m.Grades.Average(k => k.GradeValue)).Union(actorsForIndex.Actors); break; case "quantityGradeDesc": actorsForIndex.Actors = actorsForIndex.Actors.Where(m => m.Grades.Any()).OrderByDescending(m => m.Grades.Count()).Union(actorsForIndex.Actors); break; case "quantityGrade": actorsForIndex.Actors = actorsForIndex.Actors.Where(m => m.Grades.Any()).OrderBy(m => m.Grades.Count()).Union(actorsForIndex.Actors); break; default: actorsForIndex.Actors = actorsForIndex.Actors.OrderBy(m => m.LastName); break; } }