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());
        }
Esempio n. 4
0
        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;
        }