InsanelySimpleBlog.Services.Implementation.PostsService.RecentPosts C# (CSharp) Метод

RecentPosts() публичный Метод

public RecentPosts ( int pageNumber, int pageSize, int categoryId, System.DateTime startDate, System.DateTime endDate ) : IEnumerable
pageNumber int
pageSize int
categoryId int
startDate System.DateTime
endDate System.DateTime
Результат IEnumerable
        public IEnumerable<PostViewModel> RecentPosts(int pageNumber, int pageSize, int? categoryId, DateTime? startDate, DateTime? endDate)
        {
            Condition.Requires(pageNumber, "pageNumber").IsGreaterOrEqual(0);
            Condition.Requires(pageSize, "pageSize").IsLessOrEqual(ServiceConstants.MaximumPageSize+1);
            Condition.Requires(pageSize, "pageSize").IsGreaterThan(0);

            Post[] posts = null;

            using(IUnitOfWork unitOfWork = _unitOfWorkFactory.Create())
            {

                unitOfWork.Execute(() =>
                                                {
                                                    IRepository<Post> repository = unitOfWork.GetRepository<Post>();
                                                    IQueryable<Post> query = repository.AllIncluding(x => x.Categories, x => x.Author);
                                                    if (categoryId.HasValue)
                                                    {
                                                        query = query.Where(x => x.Categories.Any(c => c.CategoryID == categoryId.Value));
                                                    }
                                                    if (startDate.HasValue)
                                                    {
                                                        query = query.Where(x => x.PostedAt >= startDate.Value);
                                                    }
                                                    if (endDate.HasValue)
                                                    {
                                                        query = query.Where(x => x.PostedAt <= endDate.Value);
                                                    }
                                                    posts = query
                                                        .OrderByDescending(x => x.PostedAt)
                                                        .Skip(pageNumber*pageSize)
                                                        .Take(pageSize+1)
                                                        .ToArray();
                                                });
            }

            return posts.Select(x => _postMapper.Map(x)).ToArray();
        }

Usage Example

        public void RecentPostsBeforeEndDate()
        {
            // Arrange
            PostViewModel mappedPost1 = new PostViewModel { PostID = 1 };
            PostsService service = new PostsService(_unitOfWorkFactory, _mapper);
            _mapper.Stub(x => x.Map(_post1)).Return(mappedPost1);

            // Act
            IEnumerable<PostViewModel> models = service.RecentPosts(0, 10, null, null, DateTime.Now.Subtract(TimeSpan.FromDays(1)));

            // Assert
            Assert.That(models.First(), Is.EqualTo(mappedPost1));
            Assert.That(models.Count(), Is.EqualTo(1));
        }
All Usage Examples Of InsanelySimpleBlog.Services.Implementation.PostsService::RecentPosts