Beispiel #1
0
 protected override Expression VisitNew(NewExpression node)
 {
     _sb.Append("@" + Parameters.CurrentIndex);
     Parameters.RegisterParameter(node.GetValue());
     return(node);
 }
Beispiel #2
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));
            }
        }
Beispiel #3
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));
            }
        }