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, }); }
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>()); } }