private bool _PerformComparison(string query, object target, string operation) { var evaluator = string.IsNullOrEmpty(operation) ? Evaluators.FirstOrDefault() : Evaluators.FirstOrDefault(e => e.Operation == operation); if (evaluator == null) { return(false); } if (target is bool b) { return(bool.TryParse(query, out var boolQuery) && evaluator.Match(boolQuery, b)); } if (target is sbyte || target is byte || target is char || target is short || target is ushort || target is int || target is uint || target is long || target is ulong || target is float || target is double || target is decimal) { return(double.TryParse(query, out var doubleQuery) && evaluator.Match(doubleQuery, Convert.ToDouble(target))); } return(evaluator.Match(query, target?.ToString(), IsCaseSensitive)); }