示例#1
0
 public SendFilterWithPhoto(int photoId, FilterSortSettings filterSortSettings, ChosenItem chosenItem)
 {
     PhotoId            = photoId;
     FilterSortSettings = filterSortSettings;
     ChosenItem         = chosenItem;
 }
示例#2
0
        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();
            }
        }