예제 #1
0
        private static void VisitBinaryMemberAccess(AttributeBuilder builder, BinaryExpression binary, FilterOperator filterOperator)
        {
            Expression valueExpression  = null;
            var        memberExpression = GetMemberAccessExpression(builder, binary.Left);

            if (memberExpression == null)
            {
                valueExpression = binary.Left;

                memberExpression = GetMemberAccessExpression(builder, binary.Right);

                if (memberExpression == null)
                {
                    // no member was found..so assume one of the values is an attribute name.
                    var attributeName  = Expression.Lambda(binary.Left).Compile().DynamicInvoke();
                    var attributeValue = Expression.Lambda(binary.Right).Compile().DynamicInvoke();
                    builder.AddAttribute(Convert.ToString(attributeName), filterOperator, EscapeCharacters(attributeValue));
                    return;
                }
            }
            else
            {
                valueExpression = binary.Right;
            }

            var value = Expression.Lambda(valueExpression).Compile().DynamicInvoke();

            builder.AddAttribute(GetName(memberExpression.Member), filterOperator, EscapeCharacters(value));
        }
예제 #2
0
        private static void VisitMethodCall(AttributeBuilder builder, MethodCallExpression method, Expression valueExpression, FilterOperator filterOperator)
        {
            var value            = Expression.Lambda(valueExpression).Compile().DynamicInvoke();
            var memberExpression = GetMemberAccessExpression(builder, method.Object);

            builder.AddAttribute(GetName(memberExpression.Member), filterOperator, value);
        }