public JsonResult GetLocationsByDistance(LocationUtilsFilterOptions locationFilterOptions, ResultsFilter resultsFilter, PagedListOptions pagedListOptions)
        {
            var locationFilter = locationFilterOptions.ToLocationFilter();
            var minutes = resultsFilter.Minutes;
            pagedListOptions.SortBy = pagedListOptions.SortBy ?? "Distance";

            var locationsQuery = db.Locations
                .Where(x => x.Coordinate.Distance(locationFilter.Origin) <= locationFilter.Radius)
                .Select(x => new LocationModel
                {
                    LocationId = x.LocationID,
                    AddressLine1 = x.Address,
                    AddressLine2 = x.Address,
                    AddressLine3 = x.Address,
                    AddressLine4 = x.Address,
                    AddressLine5 = x.Address,
                    PostalCode = "BS234",
                    Distance = x.Coordinate.Distance(locationFilter.Origin)
                });
            
            var data = locationsQuery.ToPagedListData(pagedListOptions)
                .Select(x => new ResultModel
                {
                    LocationId = x.LocationId,
                    Address = x.Address,
                    Miles = x.Miles
                });

            var result = new PagedListResult<ResultModel>(data, locationsQuery.ToPagedListDetails());

            return Json(result, JsonRequestBehavior.AllowGet);
        }
        public PagedListResult<BooksModel> Get(PagedListOptions pagedListOptions)
        {
            var book = db.Books.Select(x => new BooksModel
            {
                BookId = x.BookId,
                Description = x.Description,
                Title = x.Title,
                PublishDate = x.PublishDate,
                Author = x.Author.FirstName + " " + x.Author.LastName
            }).ToPagedListResult(pagedListOptions);

            return book;
        }
        public PagedListResult<BooksModel> GetList(BooksFilterOptions filters, PagedListOptions pagedListOptions)
        {
            //try
            //{
            //    //Seed();
            //}
            //catch (Exception ex)
            //{
            //    throw ex;
            //}

            Test();

            var data = db.Books.AsQueryable();

            // filter Description
            if (!string.IsNullOrEmpty(filters.Title))
            {
                data = data.Where("Title.Contains(@0)", filters.Title);
            }

            // filter Author
            if (!string.IsNullOrEmpty(filters.Author))
            {
                //data = data.Where("Author.Person.LastName.Contains(@0) OR Author.Person.FirstName.Contains(@0)", filters.Author);
                //data = data.Where("Author.Person.FirstName.Contains(@0)", filters.Author);
            }

            // filter Description
            if (!string.IsNullOrEmpty(filters.Description))
            {
                data = data.Where(x => x.Description.Contains(filters.Description));
            }

            // REQUIRED
            pagedListOptions.SortBy = pagedListOptions.SortBy ?? "BookId";

            var r = new Random();
            var pagedListResult = data
                .Select(x => new BooksModel
                {
                    AuthorFirstName = x.Author.FirstName,
                    BookId = x.BookId,
                    //Description = Common.QueryHelpers.BookingCost, //r.Next(9999, int.MaxValue).ToString(), //x.Description,
                    PublishDate = x.PublishDate
                }).ToPagedListResult(pagedListOptions);

            var res = new List<BooksModel>();

            pagedListResult.Data.ToList()
            .ForEach(x =>
            {
                var a = r.Next(9999, int.MaxValue) * .0001;
                x.Description = a.ToString();

                res.Add(x);
            });

            //pagedListResult.Data = res;

            return new PagedListResult<BooksModel>(res, pagedListResult.Details);

            //var pagedListResult = data
            //    .OrderBy(pagedListOptions.OrderBy)
            //    .Skip(pagedListOptions.Start)
            //    .Take(pagedListOptions.ShowAll ? data.Count() : pagedListOptions.Entries)
            //    .Select(x => new BooksModel()
            //    {
            //        BookId = x.BookId,
            //        Title = x.Title,
            //        Description = x.Description,
            //        Author = x.Author.Person.FirstName + " " + x.Author.Person.LastName,
            //        PublishDate = x.PublishDate
            //    });//.ToPagedListResult(pagedListOptions);

            //var result = new PagedListResult<BooksModel>(pagedListResult, new PagedListDetails()
            //{
            //    TotalEntries = data.Count()
            //});
            //return result;


            //return pagedListResult;
            //// sample data



            //try
            //{
            //    db.Books.AddRange(sampleData);
            //    db.SaveChanges();
            //}
            //catch (Exception ex)
            //{

            //    throw ex;
            //}

            // sample data end

            // convert to queryable
            //var data = books.AsQueryable();

            //// filter data
            //if (!string.IsNullOrEmpty(filters.Author))
            //{
            //    data = data.Where(x => x.Author.ToLower().Contains(filters.Author.ToLower()));
            //    //data = data.Where("Author.Contains(@0)", filters.Author);
            //}

            //// filter data
            //if (!string.IsNullOrEmpty(filters.Description))
            //{
            //    data = data.Where(x => x.Description.ToLower().Contains(filters.Description.ToLower()));
            //}

            //// set default sort field
            //pagedListOptions.SortBy = pagedListOptions.SortBy ?? "BookId";

            //// get paged list result
            //var pagedListResult = data.ToPagedListResult(pagedListOptions);

            //return pagedListResult;
        }