예제 #1
0
        public IEnumerable <AlbumViewModel> AdvancedSearchAlbum(AdvancedSearchAlbumViewModel searchData)
        {
            var albums =
                _db.Albums
                .Where(
                    a =>
                    (a.IsDeleted == false) &&
                    (searchData.StyleId != null ? a.StyleId == searchData.StyleId : true) &&
                    (searchData.Name != null ? a.Name.Contains(searchData.Name) : true) &&
                    (searchData.Artist != null ? a.Artist.Name.Contains(searchData.Artist) : true) &&
                    (searchData.YearTo != null && searchData.YearFrom != null ? (a.Year >= searchData.YearFrom && a.Year <= searchData.YearTo) : true) &&
                    (searchData.YearTo != null && searchData.YearFrom == null ? a.Year <= searchData.YearTo : true) &&
                    (searchData.YearTo == null && searchData.YearFrom != null ? a.Year >= searchData.YearFrom : true) &&
                    (searchData.RatingFrom != null && searchData.RatingTo != null ? (a.Ratings.Any() ? a.Ratings.Average(r => r.Rate) >= searchData.RatingFrom && a.Ratings.Average(r => r.Rate) <= searchData.RatingTo : false) : true) &&
                    (searchData.RatingFrom != null && searchData.RatingTo == null ? (a.Ratings.Any() ? a.Ratings.Average(r => r.Rate) >= searchData.RatingFrom : false) : true) &&
                    (searchData.RatingFrom == null && searchData.RatingTo != null ? (a.Ratings.Any() ? a.Ratings.Average(r => r.Rate) <= searchData.RatingTo : true) : true)
                    )
                .Select(a => new AlbumViewModel()
            {
                Id          = a.Id,
                Name        = a.Name,
                Artist      = a.Artist.Name,
                Duration    = a.Duration,
                Style       = a.Style.Name,
                Year        = a.Year,
                TotalRating = a.Ratings.Any() ? (float)a.Ratings.Average(r => r.Rate) : 0
            })
                .OrderByDescending(a => a.TotalRating);

            return(albums);
        }
예제 #2
0
        public IHttpActionResult AdvancedSearch([FromUri] AdvancedSearchAlbumViewModel searchData)
        {
            var albums = _service.AdvancedSearchAlbum(searchData);

            return(Ok(albums));
        }