protected override CamlExpression VisitWhereBinaryComparisonExpression(CamlWhereBinaryComparisonExpression expression)
 {
     if (expression.Operator == CamlBinaryOperator.In)
     {
         try {
             expression.Value.BindCollection(this.Bindings).Any();
         } catch (CamlParameterBindingEmptyCollectionException) {
             return(Caml.False);
         }
     }
     return(expression);
 }
 protected override CamlExpression VisitWhereBinaryComparisonExpression(CamlWhereBinaryComparisonExpression expression)
 {
     if (expression.Operator == CamlBinaryOperator.Eq || expression.Operator == CamlBinaryOperator.Neq)
     {
         if (transformFields.Contains(expression.FieldName.Bind(this.Bindings)))
         {
             try {
                 expression.Value.Bind(this.Bindings);
             } catch (CamlParameterBindingNullException) {
                 return(UpdateExpression(expression, expression.FieldName, expression.Operator == CamlBinaryOperator.Eq));
             }
         }
     }
     return(expression);
 }
Пример #3
0
        private CamlExpression HandleEqualityComparison(SPModelQueryFieldInfo s, CamlBinaryOperator op)
        {
            ICamlParameterBinding value      = currentScope.GetValueBinding(s);
            CamlExpression        expression = new CamlWhereBinaryComparisonExpression(op, s.FieldRef, value);
            Type memberType = currentScope.MemberType;

            if (memberType.IsGenericType && memberType.GetGenericTypeDefinition() == typeof(Nullable <>))
            {
                memberType = memberType.GetGenericArguments()[0];
            }
            if (memberType.IsValueType || memberType == typeof(string))
            {
                string defaultValue = value.Bind(new Hashtable {
                    { currentScope.ParameterName, memberType.IsValueType ? memberType.GetDefaultValue() : "" }
                });
                CamlExpression lateBoundCond = new CamlLateBoundDefaultValueAsNullExpression(s.FieldRef, value, defaultValue);
                return(op == CamlBinaryOperator.Eq ? expression | lateBoundCond : expression& ~lateBoundCond);
            }
            return(expression);
        }
Пример #4
0
 protected override CamlExpression VisitWhereBinaryComparisonExpression(CamlWhereBinaryComparisonExpression expression)
 {
     using (new WhereExpressionScope(this)) {
         string propertyName = GetPropertyName(expression.FieldName);
         if (expression.Operator == CamlBinaryOperator.In)
         {
             bool appendOr = false;
             queryBuilder.Append("(");
             foreach (string value in expression.Value.BindCollection(bindings))
             {
                 if (appendOr)
                 {
                     queryBuilder.Append(" OR ");
                 }
                 queryBuilder.Append(propertyName);
                 queryBuilder.Append("=\"");
                 queryBuilder.Append(value);
                 queryBuilder.Append("\"");
                 appendOr = true;
             }
             queryBuilder.Append(")");
         }
         else
         {
             queryBuilder.Append(GetPropertyName(expression.FieldName));
             queryBuilder.Append(GetKqlOperator(expression.Operator));
             queryBuilder.Append("\"");
             queryBuilder.Append(expression.Value.Bind(bindings));
             if (expression.Operator == CamlBinaryOperator.BeginsWith)
             {
                 queryBuilder.Append("*");
             }
             queryBuilder.Append("\"");
         }
     }
     return(base.VisitWhereBinaryComparisonExpression(expression));
 }
Пример #5
0
 /// <summary>
 /// Called when visiting a binary comparison expression inside a &lt;Where/&gt; element.
 /// </summary>
 /// <param name="expression">An instance of the <see cref="CamlWhereBinaryComparisonExpression"/> class representing the binary comparison expression.</param>
 /// <returns>When overriden, returns an expression to replace the expression given in arguments.</returns>
 protected virtual CamlExpression VisitWhereBinaryComparisonExpression(CamlWhereBinaryComparisonExpression expression)
 {
     return(expression);
 }
Пример #6
0
 protected override CamlExpression VisitWhereBinaryComparisonExpression(CamlWhereBinaryComparisonExpression expression)
 {
     return(IsFieldAllowed(expression.FieldName.Bind(this.Bindings)) ? expression : Caml.False);
 }