private SearchQueryFilter MapToFilter(List list, FilterFieldQueryOperator filterOperator, string filterField, string filterFieldValue, FilterChainingOperator?chainingOperatorUsedInCQWP) { if (string.IsNullOrEmpty(filterField)) { return(null); } var foundFields = list.Context.LoadQuery(list.Fields.Where(item => item.InternalName == filterField)); list.Context.ExecuteQueryRetry(); if (foundFields.FirstOrDefault() != null) { // Store field for future reference this.queryFields.Add(foundFields.FirstOrDefault()); // Resolve user ID to name if (foundFields.FirstOrDefault().FieldTypeKind == FieldType.User) { //[11;#i:0#.f|membership|[email protected]] if (filterFieldValue.Contains("|")) { // grab UPN string[] accountParts = filterFieldValue.Replace("[", "").Replace("]", "").Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries); //string upn = accountParts[accountParts.Length - 1]; if (int.TryParse(accountParts[0], out int userId)) { var user = this.clientContext.Web.GetUserById(userId); this.clientContext.Load(user, p => p.Title); this.clientContext.ExecuteQueryRetry(); filterFieldValue = user.Title; } } } // Build the search query filter object var s = new SearchQueryFilter { Value = filterFieldValue, FilterType = FilterType.Field, Op = MapQueryFilterOperator(filterOperator), Fieldname = foundFields.FirstOrDefault().InternalName, ChainingOperatorUsedInCQWP = chainingOperatorUsedInCQWP, FieldNameMatchText = "" }; return(s); } return(null); }
private FilterOperator?MapQueryFilterOperator(FilterFieldQueryOperator filterOperator) { switch (filterOperator) { case FilterFieldQueryOperator.BeginsWith: { return(FilterOperator.BeginsWith); } case FilterFieldQueryOperator.Contains: { return(FilterOperator.Contains); } case FilterFieldQueryOperator.Eq: { return(FilterOperator.Equals); } case FilterFieldQueryOperator.Neq: { return(FilterOperator.NotEqual); } case FilterFieldQueryOperator.Gt: case FilterFieldQueryOperator.Geq: { return(FilterOperator.GreaterThan); } case FilterFieldQueryOperator.Lt: case FilterFieldQueryOperator.Leq: { return(FilterOperator.LessThan); } default: { return(null); } } }