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); }
public IHttpActionResult AdvancedSearch([FromUri] AdvancedSearchAlbumViewModel searchData) { var albums = _service.AdvancedSearchAlbum(searchData); return(Ok(albums)); }