public SendFilterWithPhoto(int photoId, FilterSortSettings filterSortSettings, ChosenItem chosenItem) { PhotoId = photoId; FilterSortSettings = filterSortSettings; ChosenItem = chosenItem; }
public List <int> GetSortedFilteredPhotosIds(FilterSortSettings settings, ChosenItem item) { Expression <Func <PhotoEntity, bool> > filterExpression = x => (settings.Format == Format.None || x.Format == settings.Format) && (settings.ResolutionId <= 0 || x.ResolutionId == settings.ResolutionId) && (string.IsNullOrEmpty(settings.SearchString) || x.Name.Contains(settings.SearchString)) && x.CreatedTime >= settings.DateFrom && x.CreatedTime <= settings.DateTo; var photos = _dataContext.Photos.Where(filterExpression).Include(x => x.Tags).ToList(); var filteredPhotos = new List <PhotoEntity>(); switch (item.ItemType) { case ItemType.Album: filteredPhotos.AddRange(photos.Where(x => x.AlbumId == item.Id).ToList()); break; case ItemType.Person: var personTags = _dataContext.PersonTags.Where(x => x.PersonId == item.Id).ToList(); foreach (var tag in personTags) { filteredPhotos.AddRange(photos.Where(x => x.Tags.Contains(tag)).ToList()); } break; case ItemType.Item: var itemTags = _dataContext.ItemTags.Where(x => x.Item.Id == item.Id); foreach (var tag in itemTags) { filteredPhotos.AddRange(photos.Where(x => x.Tags.Contains(tag)).ToList()); } break; default: Debugger.Break(); throw new ArgumentOutOfRangeException(); } switch (settings.Sort) { case Sort.ByDateTime when settings.SortAscending: return(filteredPhotos.OrderBy(x => x.CreatedTime).Select(x => x.Id).ToList()); case Sort.ByDateTime when !settings.SortAscending: return(filteredPhotos.OrderByDescending(x => x.CreatedTime).Select(x => x.Id).ToList()); case Sort.ByName when settings.SortAscending: return(filteredPhotos.OrderBy(x => x.Name).Select(x => x.Id).ToList()); case Sort.ByName when !settings.SortAscending: return(filteredPhotos.OrderByDescending(x => x.Name).Select(x => x.Id).ToList()); case Sort.None: return(filteredPhotos.Select(x => x.Id).ToList()); default: Debugger.Break(); throw new ArgumentOutOfRangeException(); } }