Пример #1
0
        public static IEnumerable <T> Paginate <T>(this IEnumerable <T> queryable, int page, int count)
        {
            ContractUtil.IsInRange(page, 1);
            ContractUtil.IsInRange(count, 1);

            return(queryable.Skip((page - 1) * count).Take(count));
        }
        /// <summary>
        /// Retrieve the posts that will be show to a given user.
        /// </summary>
        /// <param name="user">An user.</param>
        /// <param name="page">The page number.</param>
        /// <param name="count">The posts count.</param>
        /// <returns></returns>
        public IList <Post> GetPosts(User user, int page = 1, int count = 10)
        {
            ContractUtil.NotNull(user);
            ContractUtil.IsInRange(page, 1);
            ContractUtil.IsInRange(count, 1);

            var postRepository = _unitOfWork.Posts;

            return(user.Friends.SelectMany(postRepository.FindPostsTo)
                   .Where(post => post.IsPersonal)
                   .Concat(postRepository.FindPostsTo(user))
                   .OrderByDescending(post => post.Date)
                   .Paginate(page, count)
                   .ToList());
        }