public static void ApplyConditions(List <Entity> entities, CustomQueryVisitor visitor) { foreach (var condition in visitor.Conditions) { int.TryParse(condition.Values[0]?.ToString(), out var conditionNumber); switch (condition.Operator) { case ConditionOperator.Equal: entities.RemoveAll(x => !x.GetAttributeValue(condition.AttributeName).Equals(condition.Values[0])); break; case ConditionOperator.NotEqual: entities.RemoveAll(x => x.GetAttributeValue(condition.AttributeName).Equals(condition.Values[0])); break; case ConditionOperator.LessThan: entities.RemoveAll(x => (int)x.GetAttributeValue(condition.AttributeName) >= conditionNumber); break; case ConditionOperator.GreaterThan: entities.RemoveAll(x => (int)x.GetAttributeValue(condition.AttributeName) <= conditionNumber); break; case ConditionOperator.LessEqual: entities.RemoveAll(x => (int)x.GetAttributeValue(condition.AttributeName) > conditionNumber); break; case ConditionOperator.GreaterEqual: entities.RemoveAll(x => (int)x.GetAttributeValue(condition.AttributeName) < conditionNumber); break; case ConditionOperator.Like: entities.RemoveAll(x => { var entityStringValue = x.GetAttributeValue(condition.AttributeName).ToString(); var conditionStringValue = condition.Values[0].ToString(); conditionStringValue = conditionStringValue.Substring(1, conditionStringValue.Length - 2); return(!entityStringValue.Contains(conditionStringValue)); }); break; case ConditionOperator.NotLike: entities.RemoveAll(x => { var entityStringValue = x.GetAttributeValue(condition.AttributeName).ToString(); var conditionStringValue = condition.Values[0].ToString(); conditionStringValue = conditionStringValue.Substring(1, conditionStringValue.Length - 2); return(entityStringValue.Contains(conditionStringValue)); }); break; } } }
public static EntityCollection SetPaging(List <Entity> results, CustomQueryVisitor visitor) { var totalCount = results.Count; var resultEntityCollection = new EntityCollection { TotalRecordCount = totalCount, MoreRecords = Math.Ceiling(totalCount * 1.0 / visitor.Count) > visitor.PageNumber }; return(resultEntityCollection); }
public static List <Entity> OrderResults(CustomQueryVisitor visitor, List <Entity> entities) { if (!visitor.Orders.Any()) { return(entities); } var firstOrderBy = visitor.Orders.First(); var orderedFilteredEntities = SortResults(firstOrderBy, entities); foreach (var orderBy in visitor.Orders.Skip(1).ToList()) { orderedFilteredEntities = SortResults(orderBy, orderedFilteredEntities, true); } return(orderedFilteredEntities.ToList()); }
public static void SetOutput(EntityCollection resultEntityCollection, List <Entity> results, CustomQueryVisitor visitor, IPluginExecutionContext context) { var pagedResults = results .Skip((visitor.PageNumber - 1) * visitor.Count) .Take(visitor.Count).ToList(); resultEntityCollection.Entities.AddRange(pagedResults); resultEntityCollection.PagingCookie = $"<cookie page=\"{visitor.PageNumber}\"><ryr_entityid last=\"{pagedResults.Last().Id:B}\" first=\"{pagedResults.First().Id:B}\" /></cookie>"; context.OutputParameters[ContextProperties.Results] = resultEntityCollection; }