Example #1
0
        protected override Expression VisitParameter(ParameterExpression node)
        {
            object argument;

            if (parameterMappings.TryGetValue(node.Name, out argument))
            {
                if (ReflectionHelper.IsInstanceOf(node.Type, argument))
                {
                    return(Expression.Constant(argument));
                }
                else if (argument is Expression)
                {
                    return((Expression)argument);
                }
                else
                {
                    var notifyValueType = typeof(INotifyValue <>).MakeGenericType(node.Type);
                    if (ReflectionHelper.IsInstanceOf(notifyValueType, argument))
                    {
                        throw new NotImplementedException();
                    }
                    throw new InvalidOperationException(string.Format("The provided value {0} for parameter {1} is not valid.", argument, node.Type));
                }
            }
            else
            {
                return(node);
            }
        }
            protected override Expression VisitParameter(ParameterExpression node)
            {
                object argument;

                if (parameterMappings.TryGetValue(node.Name, out argument))
                {
                    if (ReflectionHelper.IsInstanceOf(node.Type, argument))
                    {
                        return(Expression.Constant(argument, node.Type));
                    }
                    else
                    {
                        INotifyExpression expression = argument as INotifyExpression;
                        if (expression != null && expression.IsConstant)
                        {
                            return(Expression.Constant(expression.ValueObject, node.Type));
                        }
                        else
                        {
                            var notifyValueType = typeof(INotifyValue <>).MakeGenericType(node.Type);
                            return(Expression.MakeMemberAccess(Expression.Constant(argument, notifyValueType), ReflectionHelper.GetProperty(notifyValueType, "Value")));
                        }
                    }
                }
                else
                {
                    return(node);
                }
            }
        protected override Expression VisitParameter(ParameterExpression node)
        {
            object value;

            if (parameters.TryGetValue(node.Name, out value))
            {
                if (ReflectionHelper.IsInstanceOf(node.Type, value) || value == null)
                {
                    var createType = typeof(ObservableConstant <>).MakeGenericType(node.Type);
                    return((Expression)(ReflectionHelper.GetConstructor(createType).Invoke(new object[] { value })));
                }
                else
                {
                    var expression = value as Expression;
                    if (expression != null)
                    {
                        return(expression);
                    }
                    else
                    {
                        throw new InvalidOperationException(string.Format("The provided value {0} for parameter {1} is not valid.", value, node.Type));
                    }
                }
            }
            else
            {
                var createType = typeof(ObservableParameter <>).MakeGenericType(node.Type);
                return((Expression)(ReflectionHelper.GetConstructor(createType).Invoke(new object[] { node.Name })));
            }
        }
 protected override bool GetValue()
 {
     if (!ExactMatch)
     {
         return(Inner.Value == null || ReflectionHelper.IsInstanceOf(TypeOperand, Inner.Value));
     }
     else
     {
         return(Inner.Value == null || Inner.Value.GetType() == TypeOperand);
     }
 }