public static LogicalJoin Or(this LogicalJoin @operator, params Operator[] operators) { if (@operator == null) { throw new ArgumentNullException("operator"); } return(@operator.CombineOr(operators)); }
private string CamlQueryBuilder(List list, ContentByQuery cbq) { // Copy the CBQW filters List <SearchQueryFilter> filters = new List <SearchQueryFilter>(); filters.AddRange(this.properties.Query.Filters); // Add the default filter filters.Add(new SearchQueryFilter() { ChainingOperatorUsedInCQWP = FilterChainingOperator.And, Fieldname = "FSObjType", Op = FilterOperator.Equals, Value = 0 }); // Sorting: if CBQW was sorted on one of the 4 allowed fields then take over the setting, else fall back to default sort (= Modified) string sortField = "Modified"; if (!string.IsNullOrEmpty(cbq.SortBy)) { if (cbq.SortBy.Equals("Title") || cbq.SortBy.Equals("FileLeafRef") || cbq.SortBy.Equals("Author")) { sortField = cbq.SortBy; } } // Sort order cannot be choosen: Modified = descending, others are ascending string sortOrder = "True"; if (sortField == "Modified") { sortOrder = "False"; } string query = ""; Query queryCaml = null; var and = LogicalJoin.And(); var or = LogicalJoin.Or(); // Do we have filters to apply? if (filters.Any()) { for (int i = 0; i < filters.Count; i++) { var queryFilter = filters[i]; var nextQueryFilter = filters[i]; if (i < filters.Count - 1) { nextQueryFilter = filters[i + 1]; } if (queryFilter.ChainingOperatorUsedInCQWP == FilterChainingOperator.And && nextQueryFilter.ChainingOperatorUsedInCQWP == FilterChainingOperator.And) { and.AddStatement(CamlFilterBuilder(queryFilter)); } else { or.AddStatement(CamlFilterBuilder(queryFilter)); } } if (or.HasStatements()) { and.AddStatement(or); } } queryCaml = Query.Build(and); query = queryCaml.GetCaml(true).Replace("\r", "").Replace("\n", ""); return($"<View Scope=\"RecursiveAll\"><Query>{query}<OrderBy><FieldRef Name=\"{sortField}\" Ascending=\"{sortOrder}\" /></OrderBy></Query><ViewFields><FieldRef Name=\"Editor\" /><FieldRef Name=\"FileLeafRef\" /><FieldRef Name=\"File_x0020_Type\" /><FieldRef Name=\"ID\" /><FieldRef Name=\"Modified\" /><FieldRef Name=\"Title\" /><FieldRef Name=\"UniqueID\" /></ViewFields><RowLimit Paged=\"false\">{cbq.ItemLimit}</RowLimit></View>"); }