public static IPagedList <T> GetPaged <T>(this QueryFluent <T> query, GridRequest request) where T : EntityBase { return(query.Where(request.GetFilters <T>()) .OrderBy(request.GetSortExpression()) .Paged(request.Page, request.PageSize)); }
// Where public static QueryFluent <TEntity> Where <TEntity>(this QueryFluent <TEntity> _this, Expression <Func <TEntity, bool> > predicate) { var body = predicate.Body; switch (body) { case BinaryExpression binary: var left = binary.Left as MemberExpression ?? throw new ArgumentException("Lhs must be PropertyAccess", nameof(predicate)); // Usually MethodCallExpression is passed. // Sometimes UnaryExpression is passed even though the same syntax. MethodCallExpression right; switch (binary.Right) { case MethodCallExpression methodExp: right = methodExp; break; case UnaryExpression unaryExp: right = unaryExp.Operand as MethodCallExpression ?? throw new ArgumentException("Rhs must be Lt.Arg<>()", nameof(predicate)); break; default: throw new ArgumentException("Rhs must be Lt.Arg<>()", nameof(predicate)); } string parameterName; if (right.Arguments.Count == 0) { parameterName = left.Member.Name; } else { var arg = right.Arguments[0] as ConstantExpression ?? throw new ArgumentException("Rhs must be Lt.Arg<>()", nameof(predicate)); parameterName = (string)arg.Value ?? throw new ArgumentException("Lt.Arg<>() argment must not null", nameof(predicate)); } switch (binary.NodeType) { case ExpressionType.Equal: return(_this.Where(new EqualOperator(new Property <TEntity>(left.Member.Name), new Parameter(parameterName)))); default: throw new NotSupportedException($"not supported convert [{binary.NodeType}]"); } default: throw new NotSupportedException($"not supported [{body}]"); } }