예제 #1
0
        /// <summary>
        /// Intialize the query with the specified property values
        /// </summary>
        /// <param name="_filter"></param>
        /// <param name="_results"></param>
        /// <param name="_pagingProperties"></param>
        private void _initialize(TFilter _filter, List <T> _results, IPagingProperties <T> _pagingProperties)
        {
            if (_filter == null)
            {
                Filter = new TFilter();
            }
            else
            {
                Filter = _filter;
            }

            if (_results == null)
            {
                Results = new List <T>();
            }
            else
            {
                Results = _results;
            }

            if (_pagingProperties == null)
            {
                PagingProperties = new PagingProperties <T>();
            }
            else
            {
                PagingProperties = _pagingProperties;
            }
        }
예제 #2
0
        /// <summary>
        /// Retrieve a paged list of categories
        /// </summary>
        /// <param name="pagingProperties"></param>
        /// <returns></returns>
        public IQuery <CategoryViewModel, StandardFilter> Categories(IPagingProperties <CategoryViewModel> pagingProperties)
        {
            //Set default paging direction if none is present
            if (pagingProperties.SortFields.Count <= 0)
            {
                pagingProperties.SortFields.Add(new SortField <CategoryViewModel>(p => p.Name, false));
            }

            Query <CategoryViewModel, StandardFilter> query = new Query <CategoryViewModel, StandardFilter>(pagingProperties);

            query.Queryable = from category in _Context.Categories
                              let postCount = (from post in _Context.Posts
                                               where post.CategoryId == category.Id
                                               select post).Count()
                                              select new CategoryViewModel()
            {
                Description = category.Description,
                Id          = category.Id,
                Modified    = category.Modified,
                Name        = category.Name,
                PostCount   = postCount,
                UrlSlug     = category.UrlSlug
            };

            query.SortAndPage();

            return(query);
        }
예제 #3
0
        public IQuery <TagViewModel, StandardFilter> Tags(IPagingProperties <TagViewModel> pagingProperties)
        {
            //Disable proxies for json serialization

            //Set default paging direction if none is present
            if (pagingProperties.SortFields.Count <= 0)
            {
                pagingProperties.SortFields.Add(new SortField <TagViewModel>(p => p.Name, false));
            }

            IQuery <TagViewModel, StandardFilter> query = new Query <TagViewModel, StandardFilter>(pagingProperties)
            {
                Queryable = from tag in _Context.Tags
                            select new TagViewModel
                {
                    Description = tag.Description,
                    Id          = tag.Id,
                    Modified    = tag.Modified,
                    Name        = tag.Name,
                    PostCount   = 0,
                    UrlSlug     = tag.UrlSlug
                }
            };

            query.SortAndPage();

            return(query);
        }
예제 #4
0
        public IQuery <Post, PostFilter> Posts(IPagingProperties <Post> pagingProperties, PostFilter filter)
        {
            if (pagingProperties.SortFields.Count <= 0)
            {
                pagingProperties.SortFields.Add(new SortField <Post>(p => p.PostedOn, false));
            }

            Query <Post, PostFilter> query = new Query <Post, PostFilter>(pagingProperties);

            if (filter.IsPublished)
            {
                query.Queryable = _Context.Posts.Where(p => p.Published)
                                  .Include(p => p.PostTags)
                                  .ThenInclude(p => p.Tag);
            }
            else
            {
                query.Queryable = _Context.Posts.Where(p => true);
            }

            query.SortAndPage();

            return(query);
        }
예제 #5
0
 /// <summary>
 /// Explicit constructor for specifying query paging properties.
 /// </summary>
 /// <param name="pagingProperties"></param>
 public Query(IPagingProperties <T> pagingProperties)
 {
     _initialize(null, null, pagingProperties);
 }