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)); }
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); }