/// <summary>
            /// Visits the ConstantExpression.
            /// </summary>
            /// <param name="node">
            /// The expression to visit.
            /// </param>
            /// <returns>
            /// The modified expression, if it or any subexpression was modified; otherwise, returns the original expression.
            /// </returns>
            protected override Expression VisitConstant(ConstantExpression node)
            {
                if (node.Type == typeof(GenericField))
                {
                    GenericField value = node.GetValue <GenericField>();

                    switch (value)
                    {
                    case GenericField.ActualType:
                        sortField = new SortField(Documents.ObjectMappingExtensions.FieldActualType, SortFieldType.STRING, sortDescending);
                        break;

                    case GenericField.StaticType:
                        sortField = new SortField(Documents.ObjectMappingExtensions.FieldStaticType, SortFieldType.STRING, sortDescending);
                        break;

                    case GenericField.Source:
                        sortField = new SortField(Documents.ObjectMappingExtensions.FieldSource, SortFieldType.STRING, sortDescending);
                        break;

                    case GenericField.Timestamp:
                        sortField = new SortField(Documents.ObjectMappingExtensions.FieldTimestamp, SortFieldType.INT64, sortDescending);
                        break;

                    default:
                        Debug.Fail("Unsupported GenericField: " + value);
                        throw new NotSupportedException(String.Format("Unsupported GenericField: {0}.", value));
                    }

                    return(node);
                }

                return(base.VisitConstant(node));
            }
Ejemplo n.º 2
0
        public static object GetValue(this Expression expression)
        {
            if (expression == null)
            {
                throw new ArgumentNullException(nameof(expression));
            }

            switch (expression.NodeType)
            {
            case ExpressionType.Constant:
            {
                ConstantExpression constantExpression = expression as ConstantExpression;
                if (constantExpression == null)
                {
                    throw new ArgumentException($"Expected {nameof(expression)} to be of type {nameof(ConstantExpression)}\r\n\t{expression}", nameof(expression));
                }

                return(constantExpression.GetValue());
            }

            case ExpressionType.Call:
            {
                MethodCallExpression methodCallExpression = expression as MethodCallExpression;
                if (methodCallExpression == null)
                {
                    throw new ArgumentException($"Expected {nameof(expression)} to be of type {nameof(MethodCallExpression)}\r\n\t{expression}", nameof(expression));
                }

                return(methodCallExpression.GetValue());
            }

            case ExpressionType.Convert:
            {
                UnaryExpression unaryExpression = expression as UnaryExpression;
                if (unaryExpression == null)
                {
                    throw new ArgumentException($"Expected {nameof(expression)} to be of type {nameof(UnaryExpression)}\r\n\t{expression}", nameof(expression));
                }

                return(unaryExpression.GetValue());
            }

            case ExpressionType.MemberAccess:
            {
                MemberExpression memberExpression = expression as MemberExpression;
                if (memberExpression == null)
                {
                    throw new ArgumentException($"Expected {nameof(expression)} to be of type {nameof(MemberExpression)}\r\n\t{expression}", nameof(expression));
                }

                return(memberExpression.GetValue());
            }

            case ExpressionType.New:
            {
                NewExpression newExpression = expression as NewExpression;
                if (newExpression == null)
                {
                    throw new ArgumentException($"Expected {nameof(expression)} to be of type {nameof(NewExpression)}\r\n\t{expression}", nameof(expression));
                }

                return(newExpression.GetValue());
            }

            default:
                throw new ArgumentException($"Invalid expression type {expression.NodeType}\r\n\t{expression}", nameof(expression));
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Get the value from an expression.
        /// </summary>
        /// <param name="expression">The expression to be evaluated.</param>
        /// <returns>the value.</returns>
        public static object GetValue(this Expression expression, JsonSerializerSettings jsonSerializerSettings)
        {
            if (expression == null)
            {
                throw new ArgumentNullException(nameof(expression));
            }

            switch (expression.NodeType)
            {
            case ExpressionType.Constant:
            {
                ConstantExpression constantExpression = expression as ConstantExpression;
                if (constantExpression == null)
                {
                    throw new ArgumentException($"Expected {nameof(expression)} to be of type {nameof(ConstantExpression)}\r\n\t{expression}", nameof(expression));
                }

                return(constantExpression.GetValue());
            }

            case ExpressionType.Call:
            {
                MethodCallExpression methodCallExpression = expression as MethodCallExpression;
                if (methodCallExpression == null)
                {
                    throw new ArgumentException($"Expected {nameof(expression)} to be of type {nameof(MethodCallExpression)}\r\n\t{expression}", nameof(expression));
                }

                return(methodCallExpression.GetValue(jsonSerializerSettings));
            }

            case ExpressionType.Convert:
            {
                UnaryExpression unaryExpression = expression as UnaryExpression;
                if (unaryExpression == null)
                {
                    throw new ArgumentException($"Expected {nameof(expression)} to be of type {nameof(UnaryExpression)}\r\n\t{expression}", nameof(expression));
                }

                return(unaryExpression.GetValue(jsonSerializerSettings));
            }

            case ExpressionType.MemberAccess:
            {
                MemberExpression memberExpression = expression as MemberExpression;
                if (memberExpression == null)
                {
                    throw new ArgumentException($"Expected {nameof(expression)} to be of type {nameof(MemberExpression)}\r\n\t{expression}", nameof(expression));
                }

                return(memberExpression.GetValue(jsonSerializerSettings));
            }

            case ExpressionType.New:
            {
                NewExpression newExpression = expression as NewExpression;
                if (newExpression == null)
                {
                    throw new ArgumentException($"Expected {nameof(expression)} to be of type {nameof(NewExpression)}\r\n\t{expression}", nameof(expression));
                }

                return(newExpression.GetValue(jsonSerializerSettings));
            }

            case ExpressionType.Not:
            {
                UnaryExpression unaryExpression = expression as UnaryExpression;
                if (unaryExpression == null)
                {
                    throw new ArgumentException($"Expected {nameof(expression)} to be of type {nameof(UnaryExpression)}\r\n\t{expression}", nameof(expression));
                }

                object unaryValue = unaryExpression.GetValue(jsonSerializerSettings);
                if (unaryValue == null ||
                    (unaryValue.GetType() != typeof(bool) && unaryValue.GetType() != typeof(bool?)))
                {
                    throw new ArgumentException($"Invalid type", nameof(expression));
                }

                return(!((bool)unaryValue));
            }

            case ExpressionType.Parameter:
            {
                ParameterExpression parameterExpression = expression as ParameterExpression;
                if (parameterExpression == null)
                {
                    throw new ArgumentException($"Expected {nameof(expression)} to be of type {nameof(ParameterExpression)}\r\n\t{expression}", nameof(expression));
                }

                throw new ArgumentException($"Invalid expression type {expression.NodeType}\r\n\t{expression}", nameof(expression));
            }


            case ExpressionType.NewArrayInit:
            {
                NewArrayExpression newArrayExpression = expression as NewArrayExpression;
                if (newArrayExpression == null)
                {
                    throw new ArgumentException($"Expected {nameof(expression)} to be of type {nameof(NewArrayExpression)}\r\n\t{expression}", nameof(expression));
                }

                return(newArrayExpression.Expressions.Select(_ => _.GetValue(jsonSerializerSettings)).ToArray());
            }

            default:
                throw new ArgumentException($"Invalid expression type {expression.NodeType}\r\n\t{expression}", nameof(expression));
            }
        }
Ejemplo n.º 4
0
        void HandleSingleBooleanConstant(ConstantExpression node)
        {
            var val = (bool)node.GetValue();

            _sb.Append(val ? "1=1" : "1<1");
        }