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