public async Task <IActionResult> GetListing([FromQuery] ListingParam listingParam)
        {
            var listings = await _repo.GetListing(listingParam);

            var ListingToReturn = _mapper.Map <IEnumerable <ListingGetDto> >(listings);

            //Tags = _mapper.Map<List<TagDTO>>(listing.ListingsTags.Select(t => t.Tag)),

            Response.AddPagination(listings.CurrentPage, listings.PageSize,
                                   listings.TotalCount, listings.TotalPages);

            return(Ok(ListingToReturn));
        }
        public async Task <PagedList <Listing> > GetListing(ListingParam listingParam)
        {
            var listings = _context.Listings
                           .Include(f => f.Photos)
                           .Include(l => l.ListingTags)
                           .ThenInclude(t => t.Tag).OrderByDescending(o => o.Id).AsQueryable();

            ///Filter by Category
            if (listingParam.CategoryId != 0)
            {
                listings = listings.Where(c => c.CategoryId == listingParam.CategoryId);
            }
            ///Filter by Location
            if (listingParam.LocationId != 0)
            {
                listings = listings.Where(c => c.LocationId == listingParam.LocationId);
            }
            ///Filter by Minimum Price
            if (listingParam.MinPrice != 0)
            {
                listings = listings.Where(c => c.Price >= listingParam.MinPrice);
            }
            ///Filter by Maximum Price
            if (listingParam.MaxPrice != 0)
            {
                listings = listings.Where(c => c.Price <= listingParam.MaxPrice);
            }
            ///Filter by Tags
            ///
            if (listingParam.TagId != null)
            {
                foreach (var item in listingParam.TagId)
                {
                    listings = listings.Where(c => c.ListingTags.Where(w => w.TagId == item) != null);
                }
            }
            ///Order By
            if (!string.IsNullOrEmpty(listingParam.OrderBy))
            {
                switch (listingParam.OrderBy)
                {
                case "LowToHigh":
                    listings = listings.OrderBy(u => u.Price);
                    break;

                case "HighToLow":
                    listings = listings.OrderByDescending(u => u.Price);
                    break;

                case "AtoZ":
                    listings = listings.OrderBy(u => u.Title);
                    break;

                case "ZtoA":
                    listings = listings.OrderByDescending(u => u.Title);
                    break;

                default:
                    listings = listings.OrderBy(u => u.Id);
                    break;
                }
            }
            return(await PagedList <Listing> .CreateAsync(listings, listingParam.PageNumber, listingParam.PageSize));
        }