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