Beispiel #1
0
 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));
 }
Beispiel #2
0
        // 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}]");
            }
        }