public static GraphQueryBase <TDto> ExtractParams <TDto>(this GraphQueryBase <TDto> request, IResolverContext context) { var page = context.Argument <int>("page") <= 0 ? 1 : context.Argument <int>("page"); var pageSize = context.Argument <int>("pageSize") <= 0 ? 20 : context.Argument <int>("pageSize"); var filterExpr = context.GetQueryableFilterExpr <TDto>(); var sortExpr = context.GetQueryableSortExpr <TDto>(); request.Page = page; request.PageSize = pageSize; request.FilterExpr = filterExpr; request.SortingVisitor = sortExpr; return(request); }
public static OffsetPaging <TResult> WithCriterions <TResult>(this IQueryable <TResult> source, GraphQueryBase <TResult> queryBase) { // filter by GraphQL if (queryBase.FilterExpr != null) { source = source.Where(queryBase.FilterExpr); } // order_by by GraphQL if (queryBase.SortingVisitor != null) { source = queryBase.SortingVisitor.Sort(source); } // pagination var totalCount = source.Count(); source = source.Skip((queryBase.Page - 1) * queryBase.PageSize).Take(queryBase.PageSize); // build pagination model var model = new OffsetPaging <TResult> { TotalCount = totalCount, Edges = source.ToList() }; return(model); }