public CamlExpression GetExpression(Func <SPModelQueryFieldInfo, CamlExpression> expressionFactory, bool checkOrderable) { CommonHelper.AccessNotNull(expressionFactory, "expressionFactory"); if (this.FieldAssociations == null) { CommonHelper.AccessNotNull(this.Field.FieldRef, "FieldRef"); return(expressionFactory(this.Field)); } if (!this.FieldAssociations.Queryable) { throw new Exception(String.Format("Member '{0}' must have exactly one SPFieldAttribute with IncludeInQuery set to true", this.Member.Name)); } if (this.FieldAssociations.Fields.Count > 1 && checkOrderable) { throw new Exception(String.Format("Member '{0}' cannot be used in ordering", this.Member.Name)); } CamlExpression expression = Caml.False; foreach (SPModelFieldAssociation association in this.FieldAssociations) { SPModelQueryFieldInfo fieldInfo = new SPModelQueryFieldInfo(visitor.Manager.Site, association); if (this.FieldAssociations.Fields.Count == 1) { return(expressionFactory(fieldInfo)); } expression |= (association.Descriptor.GetContentTypeExpression(visitor.Manager.Descriptor) + expressionFactory(fieldInfo)); } 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); }
private CamlExpression HandleNullExpression(SPModelQueryFieldInfo field, bool negate) { CamlExpression expression = Caml.IsNull(field.FieldRef); if (field.FieldTypeAsString == "TaxonomyFieldType" || field.FieldTypeAsString == "TaxonomyFieldTypeMulti") { SPList taxonomyHiddenList = SPExtensionHelper.GetTaxonomyHiddenList(manager.Site); foreach (SPListItem item in taxonomyHiddenList.GetItems("IdForTerm")) { if (manager.TermStore.GetTerm(new Guid((string)item["IdForTerm"])) == null) { expression |= Caml.LookupIdEquals(field.FieldRef, item.ID); } } } if (negate) { return(~expression); } return(expression); }
public ICamlParameterBinding GetValueBinding(SPModelQueryFieldInfo s) { return(CamlParameterBinding.GetValueBinding(visitor.Manager.Site, s.FieldType, s.FieldTypeAsString, s.IncludeTimeValue, this.MemberType, this.Value)); }