public static IEnumerable <SearchItem> ProcessValues <T>(IEnumerable <SearchItem> items, string outputValueFieldName, Func <SearchItem, T> processHandler) { var selectedItems = new List <SearchItem>(items); return(TaskEvaluatorManager.EvaluateMainThread <SearchItem>((yielder) => { foreach (var item in selectedItems) { var selectedValue = processHandler(item); if (selectedValue == null) { continue; } if (outputValueFieldName == null) { item.value = selectedValue; } else { item.SetField(outputValueFieldName, selectedValue); } yielder(item); } })); }
public IEnumerable <SearchItem> WhereMainThread(SearchExpressionContext context, IEnumerable <SearchItem> dataSet, string queryStr) { m_Context = context; var query = Parse(queryStr, true); if (query.errors.Count != 0) { foreach (var queryError in query.errors) { Debug.LogFormat(LogType.Error, LogOption.NoStacktrace, null, $"Error parsing input at {queryError.index}: {queryError.reason}"); } var errorStr = string.Join("\n", query.errors.Select(err => $"Error parsing input at {err.index}: {err.reason}")); context.ThrowError(errorStr); } var results = TaskEvaluatorManager.EvaluateMainThread(dataSet, item => { if (query.Test(item)) { return(item); } return(null); }, 25); m_Context = default; return(results); }