Exemple #1
0
        public ListWithTotalCountResult <Feedback> GetFeedbackList(int start, int count, FeedbackSortEnum sort, SortDirectionEnumContract sortDirection,
                                                                   IList <FeedbackCategoryEnum> filterCategories, PortalTypeEnum portalType)
        {
            var query = GetSession().QueryOver <Feedback>()
                        .Fetch(SelectMode.Fetch, x => x.AuthorUser)
                        .Where(x => x.PortalType == portalType);

            IQueryOverOrderBuilder <Feedback, Feedback> queryOrder;

            switch (sort)
            {
            case FeedbackSortEnum.Date:
                queryOrder = query.OrderBy(x => x.CreateTime);
                break;

            case FeedbackSortEnum.Category:
                queryOrder = query.OrderBy(x => x.FeedbackCategory);
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(sort), sort, null);
            }

            switch (sortDirection)
            {
            case SortDirectionEnumContract.Asc:
                query = queryOrder.Asc;
                break;

            case SortDirectionEnumContract.Desc:
                query = queryOrder.Desc;
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(sortDirection), sortDirection, null);
            }

            if (sort == FeedbackSortEnum.Category)
            {
                query = query.ThenBy(x => x.CreateTime).Desc;
            }

            if (filterCategories.Count > 0)
            {
                query = query.WhereRestrictionOn(x => x.FeedbackCategory).IsInG(filterCategories);
            }

            var list = query.Skip(start)
                       .Take(count)
                       .Future();

            var totalCount = query.ToRowCountQuery()
                             .FutureValue <int>();

            return(new ListWithTotalCountResult <Feedback>
            {
                List = list.ToList(),
                Count = totalCount.Value,
            });
        }
Exemple #2
0
        public virtual IList <Feedback> GetFeedbacks(List <FeedbackCategoryEnum> categories, FeedbackSortEnum sortCriteria, bool sortAsc, int?start, int?count)
        {
            using (var session = GetSession())
            {
                var query = session.QueryOver <Feedback>();

                var queryOrderBuilder = query.OrderBy(Projections.Property(sortCriteria.ToString()));

                query = sortAsc ? queryOrderBuilder.Asc : queryOrderBuilder.Desc;

                if (categories != null)
                {
                    query.Where(x => x.Category.IsIn(categories));
                }

                if (start.HasValue)
                {
                    query.Skip(start.Value);
                }

                if (count.HasValue)
                {
                    query.Take(count.Value);
                }

                return(query.Fetch(x => x.User).Eager.List <Feedback>());
            }
        }