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); }
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); }
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)); }
/// <summary> /// Called when visiting a binary comparison expression inside a <Where/> 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); }
protected override CamlExpression VisitWhereBinaryComparisonExpression(CamlWhereBinaryComparisonExpression expression) { return(IsFieldAllowed(expression.FieldName.Bind(this.Bindings)) ? expression : Caml.False); }