private Func <IQueryable <Book>, IOrderedQueryable <Book> > GetOrderBy(BookOrderBy orderBy, bool orderDesc)
        {
            switch (orderBy)
            {
            case BookOrderBy.BookId:
                return(query => !orderDesc?query.OrderBy(b => b.BookId) : query.OrderByDescending(b => b.BookId));

            case BookOrderBy.BookTitle:
            default:
                return(query => !orderDesc?query.OrderBy(b => b.Title) : query.OrderByDescending(b => b.Title));
            }
        }
        public List <Book> SearchBooks(
            out int totalCount,
            int pageSize,
            int pageNum,
            int[] author,
            int[] protagonist,
            int[] country,
            BookOrderBy orderBy = BookOrderBy.BookTitle,
            bool?orderDesc      = default(bool?))
        {
            // included entities
            var includedEntities = new List <Expression <Func <Book, object> > >
            {
                b => b.Authors.Select(a => a.Country),
                b => b.Protagonists
            };

            // search filters
            var searchCriteria = new List <Expression <Func <Book, bool> > >();

            if (author != null && author.Any() && author.All(p => p > 0))
            {
                searchCriteria.Add(b => author.Any(a => b.Authors.Any(a2 => a2.AuthorId == a)));
            }

            if (protagonist != null && protagonist.Any() && protagonist.All(p => p > 0))
            {
                searchCriteria.Add(b => protagonist.Any(p => b.Protagonists.Any(p2 => p2.ProtagonistId == p)));
            }

            if (country != null && country.Any() && country.All(p => p > 0))
            {
                searchCriteria.Add(b => country.Any(c => b.Authors.Any(a => a.CountryId == c)));
            }

            // order by
            Func <IQueryable <Book>, IOrderedQueryable <Book> > orderByFunc = GetOrderBy(orderBy, orderDesc.GetValueOrDefault());

            var bookSearchQuery = this._repo.Get(searchCriteria, orderByFunc, includedEntities);

            totalCount = bookSearchQuery.Count();

            bookSearchQuery = bookSearchQuery.Skip(pageNum * pageSize).Take(pageSize);

            return(bookSearchQuery.AsNoTracking().ToList());
        }
Exemplo n.º 3
0
        public static IQueryable <BookListDto> OrderBy(
            this IQueryable <BookListDto> books, BookOrderBy orderBy)
        {
            switch (orderBy)
            {
            case BookOrderBy.SimpleOrder:
                return(books.OrderByDescending(b => b.BookId));

            case BookOrderBy.ByVotes:
                return(books.OrderByDescending(b => b.ReviewsAverageVotes));

            case BookOrderBy.ByPublicationDate:
                return(books.OrderByDescending(b => b.PublishedOn));

            case BookOrderBy.ByPriceLowestFirst:
                return(books.OrderBy(b => b.Price));

            case BookOrderBy.ByPriceHigestFirst:
                return(books.OrderByDescending(b => b.Price));

            default: throw new ArgumentOutOfRangeException(nameof(orderBy), orderBy, null);
            }
        }
Exemplo n.º 4
0
        public IEnumerable<Book> GetBooks(out int totalRecords, string titleFilter, int? limitOffset, int? limitRowCount, BookOrderBy? orderBy, bool desc)
        {
            List<Book> results = new List<Book>();

            using (var db = new Data.MVCGridDemoEntities())
            {
                var query = db.Books.AsQueryable();

                if (!String.IsNullOrWhiteSpace(titleFilter))
                {
                    query = query.Where(p => p.Title.Contains(titleFilter));
                }
                //if (!String.IsNullOrWhiteSpace(filterLastName))
                //{
                //    query = query.Where(p => p.LastName.Contains(filterLastName));
                //}
                //if (filterActive.HasValue)
                //{
                //    query = query.Where(p => p.Active == filterActive.Value);
                //}

                //if (!String.IsNullOrWhiteSpace(globalSearch))
                //{
                //    query = query.Where(p => (p.FirstName + " " + p.LastName).Contains(globalSearch));
                //}

                totalRecords = query.Count();

                if (orderBy.HasValue)
                {
                    switch (orderBy.Value)
                    {
                        case BookOrderBy.Author:
                            if (!desc)
                                query = query.OrderBy(p => p.Author);
                            else
                                query = query.OrderByDescending(p => p.Author);
                            break;
                        case BookOrderBy.BindingTypeId:
                            if (!desc)
                                query = query.OrderBy(p => p.BindingTypeId);
                            else
                                query = query.OrderByDescending(p => p.BindingTypeId);
                            break;
                        case BookOrderBy.Imprint:
                            if (!desc)
                                query = query.OrderBy(p => p.Imprint);
                            else
                                query = query.OrderByDescending(p => p.Imprint);
                            break;
                        case BookOrderBy.Index:
                            if (!desc)
                                query = query.OrderBy(p => p.Index);
                            else
                                query = query.OrderByDescending(p => p.Index);
                            break;
                        case BookOrderBy.ISBN:
                            if (!desc)
                                query = query.OrderBy(p => p.ISBN);
                            else
                                query = query.OrderByDescending(p => p.ISBN);
                            break;
                        case BookOrderBy.Position:
                            if (!desc)
                                query = query.OrderBy(p => p.Position);
                            else
                                query = query.OrderByDescending(p => p.Position);
                            break;
                        case BookOrderBy.PublicationDate:
                            if (!desc)
                                query = query.OrderBy(p => p.PublDate);
                            else
                                query = query.OrderByDescending(p => p.PublDate);
                            break;
                        case BookOrderBy.PublisherGroup:
                            if (!desc)
                                query = query.OrderBy(p => p.PublisherGroup);
                            else
                                query = query.OrderByDescending(p => p.PublisherGroup);
                            break;
                        case BookOrderBy.Title:
                            if (!desc)
                                query = query.OrderBy(p => p.Title);
                            else
                                query = query.OrderByDescending(p => p.Title);
                            break;
                        case BookOrderBy.Volume:
                            if (!desc)
                                query = query.OrderBy(p => p.Volume);
                            else
                                query = query.OrderByDescending(p => p.Volume);
                            break;
                    }
                }

                if (limitOffset.HasValue)
                {
                    query = query.Skip(limitOffset.Value).Take(limitRowCount.Value);
                }

                foreach (var dbBook in query)
                {
                    Book book = new Book()
                    {
                        Author = dbBook.Author,
                        BindingTypeId = dbBook.BindingTypeId.Value,
                        Imprint = dbBook.Imprint,
                        Index = dbBook.Index,
                        ISBN = dbBook.ISBN,
                        Position = dbBook.Position.Value,
                        PublicationDate = dbBook.PublDate.Value,
                        PublisherGroup = dbBook.PublisherGroup,
                        Title = dbBook.Title,
                        Volume = dbBook.Volume.Value
                    };
                    results.Add(book);
                }
            }

            return results;
        }
Exemplo n.º 5
0
 public IEnumerable<Book> GetBooks(out int totalRecords, int? limitOffset, int? limitRowCount, BookOrderBy? orderBy, bool desc)
 {
     return GetBooks(out totalRecords, null, limitOffset, limitRowCount, orderBy, desc);
 }