Example #1
0
        public void TestingSort()
        {
            // subject.
            var posts = new List <Post>()
            {
                new Post {
                    Id = 1, AuthorId = 1, Title = "Hello 1", Content = "World"
                },
                new Post {
                    Id = 2, AuthorId = 1, Title = "Hello 2", Content = "World"
                },
                new Post {
                    Id = 3, AuthorId = 2, Title = "Hello 3", Content = "World"
                },
            };

            // the query.
            var query        = posts.AsQueryable();
            var queryBuilder = new OrderByBuilder(query);

            // add some sorting.
            queryBuilder
            .OrderByDescending("AuthorId")
            .ThenBy("Id");

            query = queryBuilder.Build().Cast <Post>();

            var first  = query.First();
            var second = query.Skip(1).First();

            Assert.IsTrue(first.Id == 3);
            Assert.IsTrue(second.Id == 1);
        }
Example #2
0
        public static IQueryable <T> ApplyQueryParams <T>(this IQueryable <T> queryable, QueryParams @params)
            where T : class
        {
            if (@params == null)
            {
                return(queryable);
            }

            IQueryBuilder <T> expandBuilder = new IncludeBuilder <T>();
            var result = expandBuilder.Build(@params, queryable);

            IQueryBuilder <T> filterBuilder = new QueryBuilder <T>();

            result = filterBuilder.Build(@params, result);

            IQueryBuilder <T> orderBuilder = new OrderByBuilder <T>();

            result = orderBuilder.Build(@params, result);

            IQueryBuilder <T> pagingBuilder = new PagingBuilder <T>();

            result = pagingBuilder.Build(@params, result);

            return(result);
        }
Example #3
0
        // non generic.
        public static IQueryable OrderBy(this IQueryable query, string path, QueryOrderByDirection direction, bool append)
        {
            var qb = new OrderByBuilder(query);

            qb.OrderBy(path, direction, append);
            var ret = qb.Build();

            return(ret);
        }
Example #4
0
        internal virtual IQueryable <T> BuildQuery <T>(IQueryable <T> source)
            where T : class
        {
            if (_filterSource == null)
            {
                return(source);
            }

            var whereBuilder = new WhereBuilder <T>(source, _filterSource);

            source = whereBuilder.Build();

            if (_filterSource is ISortableSearch search)
            {
                var orderByBuilder = new OrderByBuilder <T>(source);
                source = orderByBuilder.Build(search);
            }

            return(source);
        }
Example #5
0
        public static Task <T> ApplyQueryOneParams <T>(this IQueryable <T> queryable, QueryParams @params)
            where T : class
        {
            if (@params == null)
            {
                return(queryable.FirstOrDefaultAsync());
            }

            IQueryBuilder <T> expandBuilder = new IncludeBuilder <T>();
            var result = expandBuilder.Build(@params, queryable);

            IQueryBuilder <T> filterBuilder = new QueryBuilder <T>();

            result = filterBuilder.Build(@params, result);

            IQueryBuilder <T> orderBuilder = new OrderByBuilder <T>();

            result = orderBuilder.Build(@params, result);

            return(result.FirstOrDefaultAsync());
        }