Exemplo n.º 1
0
        private static (object value, string error) Evaluator(Expression expression, IMemory state, Options options)
        {
            var    result = false;
            string error;

            object instance;

            (instance, error) = expression.Children[0].TryEvaluate(state, options);
            if (error == null)
            {
                var list = FunctionUtils.ConvertToList(instance);
                if (list == null)
                {
                    error = $"{expression.Children[0]} is not a collection or structure object to run Any";
                }
                else
                {
                    FunctionUtils.LambdaEvaluator(expression, state, options, list, (object currentItem, object r, string e) =>
                    {
                        if (FunctionUtils.IsLogicTrue(r) && e == null)
                        {
                            result = true;
                            return(true);
                        }

                        return(false);
                    });
                }
            }

            return(result, error);
        }
        private static (object value, string error) Evaluator(Expression expression, IMemory state, Options options)
        {
            object result = null;
            string error;

            object instance;

            (instance, error) = expression.Children[0].TryEvaluate(state, options);
            if (error == null)
            {
                var list = FunctionUtils.ConvertToList(instance);
                if (list == null)
                {
                    error = $"{expression.Children[0]} is not a collection or structure object to run Where";
                }
                else
                {
                    result = new List <object>();
                    FunctionUtils.LambdaEvaluator(expression, state, options, list, (object currentItem, object r, string e) =>
                    {
                        if (FunctionUtils.IsLogicTrue(r) && e == null)
                        {
                            // add if only if it evaluates to true
                            ((List <object>)result).Add(currentItem);
                        }

                        return(false);
                    });

                    if (!FunctionUtils.TryParseList(instance, out IList _))
                    {
                        // re-construct object
                        var jobjResult = new JObject();
                        foreach (var item in (List <object>)result)
                        {
                            FunctionUtils.TryAccessProperty(item, "key", out var keyVal);
                            FunctionUtils.TryAccessProperty(item, "value", out var val);
                            jobjResult.Add(keyVal as string, FunctionUtils.ConvertToJToken(val));
                        }

                        result = jobjResult;
                    }
                }
            }

            return(result, error);
        }