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); }