JustBlog.Core.BlogRepository.Posts C# (CSharp) Method

Posts() public method

Return posts based on pagination and sorting parameters.
public Posts ( int pageNo, int pageSize, string sortColumn, bool sortByAscending ) : IList
pageNo int Page index
pageSize int Page size
sortColumn string Sort column name
sortByAscending bool True to sort by ascending
return IList
        public IList<Post> Posts(int pageNo, int pageSize, string sortColumn, bool sortByAscending)
        {
            IList<Post> posts;
              IList<int> postIds;

              switch (sortColumn)
              {
            case "Title":
              if (sortByAscending)
              {
            posts = _session.Query<Post>()
                            .OrderBy(p => p.Title)
                            .Skip(pageNo * pageSize)
                            .Take(pageSize)
                            .Fetch(p => p.Category)
                            .ToList();

            postIds = posts.Select(p => p.Id).ToList();

            posts = _session.Query<Post>()
                             .Where(p => postIds.Contains(p.Id))
                             .OrderBy(p => p.Title)
                             .FetchMany(p => p.Tags)
                             .ToList();
              }
              else
              {
            posts = _session.Query<Post>()
                            .OrderByDescending(p => p.Title)
                            .Skip(pageNo * pageSize)
                            .Take(pageSize)
                            .Fetch(p => p.Category)
                            .ToList();

            postIds = posts.Select(p => p.Id).ToList();

            posts = _session.Query<Post>()
                             .Where(p => postIds.Contains(p.Id))
                             .OrderByDescending(p => p.Title)
                             .FetchMany(p => p.Tags)
                             .ToList();
              }
              break;
            case "Published":
              if (sortByAscending)
              {
            posts = _session.Query<Post>()
                            .OrderBy(p => p.Published)
                            .Skip(pageNo * pageSize)
                            .Take(pageSize)
                            .Fetch(p => p.Category)
                            .ToList();

            postIds = posts.Select(p => p.Id).ToList();

            posts = _session.Query<Post>()
                             .Where(p => postIds.Contains(p.Id))
                             .OrderBy(p => p.Published)
                             .FetchMany(p => p.Tags)
                             .ToList();
              }
              else
              {
            posts = _session.Query<Post>()
                            .OrderByDescending(p => p.Published)
                            .Skip(pageNo * pageSize)
                            .Take(pageSize)
                            .Fetch(p => p.Category)
                            .ToList();

            postIds = posts.Select(p => p.Id).ToList();

            posts = _session.Query<Post>()
                             .Where(p => postIds.Contains(p.Id))
                             .OrderByDescending(p => p.Published)
                             .FetchMany(p => p.Tags)
                             .ToList();
              }
              break;
            case "PostedOn":
              if (sortByAscending)
              {
            posts = _session.Query<Post>()
                            .OrderBy(p => p.PostedOn)
                            .Skip(pageNo * pageSize)
                            .Take(pageSize)
                            .Fetch(p => p.Category)
                            .ToList();

            postIds = posts.Select(p => p.Id).ToList();

            posts = _session.Query<Post>()
                             .Where(p => postIds.Contains(p.Id))
                             .OrderBy(p => p.PostedOn)
                             .FetchMany(p => p.Tags)
                             .ToList();
              }
              else
              {
            posts = _session.Query<Post>()
                            .OrderByDescending(p => p.PostedOn)
                            .Skip(pageNo * pageSize)
                            .Take(pageSize)
                            .Fetch(p => p.Category)
                            .ToList();

            postIds = posts.Select(p => p.Id).ToList();

            posts = _session.Query<Post>()
                            .Where(p => postIds.Contains(p.Id))
                            .OrderByDescending(p => p.PostedOn)
                            .FetchMany(p => p.Tags)
                            .ToList();
              }
              break;
            case "Modified":
              if (sortByAscending)
              {
            posts = _session.Query<Post>()
                            .OrderBy(p => p.Modified)
                            .Skip(pageNo * pageSize)
                            .Take(pageSize)
                            .Fetch(p => p.Category)
                            .ToList();

            postIds = posts.Select(p => p.Id).ToList();

            posts = _session.Query<Post>()
                             .Where(p => postIds.Contains(p.Id))
                             .OrderBy(p => p.Modified)
                             .FetchMany(p => p.Tags)
                             .ToList();
              }
              else
              {
            posts = _session.Query<Post>()
                            .OrderByDescending(p => p.Modified)
                            .Skip(pageNo * pageSize)
                            .Take(pageSize)
                            .Fetch(p => p.Category)
                            .ToList();

            postIds = posts.Select(p => p.Id).ToList();

            posts = _session.Query<Post>()
                             .Where(p => postIds.Contains(p.Id))
                             .OrderByDescending(p => p.Modified)
                             .FetchMany(p => p.Tags)
                             .ToList();
              }
              break;
            case "Category":
              if (sortByAscending)
              {
            posts = _session.Query<Post>()
                            .OrderBy(p => p.Category.Name)
                            .Skip(pageNo * pageSize)
                            .Take(pageSize)
                            .Fetch(p => p.Category)
                            .ToList();

            postIds = posts.Select(p => p.Id).ToList();

            posts = _session.Query<Post>()
                             .Where(p => postIds.Contains(p.Id))
                             .OrderBy(p => p.Category.Name)
                             .FetchMany(p => p.Tags)
                             .ToList();
              }
              else
              {
            posts = _session.Query<Post>()
                            .OrderByDescending(p => p.Category.Name)
                            .Skip(pageNo * pageSize)
                            .Take(pageSize)
                            .Fetch(p => p.Category)
                            .ToList();

            postIds = posts.Select(p => p.Id).ToList();

            posts = _session.Query<Post>()
                             .Where(p => postIds.Contains(p.Id))
                             .OrderByDescending(p => p.Category.Name)
                             .FetchMany(p => p.Tags)
                             .ToList();
              }
              break;
            default:
              posts = _session.Query<Post>()
                          .OrderByDescending(p => p.PostedOn)
                          .Skip(pageNo * pageSize)
                          .Take(pageSize)
                          .Fetch(p => p.Category)
                          .ToList();

              postIds = posts.Select(p => p.Id).ToList();

              posts = _session.Query<Post>()
                           .Where(p => postIds.Contains(p.Id))
                           .OrderByDescending(p => p.PostedOn)
                           .FetchMany(p => p.Tags)
                           .ToList();
              break;
              }

              return posts;
        }

Same methods

BlogRepository::Posts ( int pageNo, int pageSize ) : IList

Usage Example

Example #1
0
 public void Get_all_posts_returns_3()
 {
     var testRepository = new BlogRepository(MockContext);
     IEnumerable<Post> result = testRepository.Posts(0, 3);
     Assert.That(result.Count(), Is.EqualTo(3));
 }