/// <summary> /// Computes the specified item1. /// </summary> /// <typeparam name="T"></typeparam> /// <param name="item1">The item1.</param> /// <param name="item2">The item2.</param> /// <param name="computeOperator">The compute operator.</param> /// <returns><c>true</c> if compute as true, <c>false</c> otherwise.</returns> private static bool Compute <T>(T item1, T item2, ComputeOperator computeOperator) where T : struct, IComparable { switch (computeOperator) { case ComputeOperator.GreatThan: return(item1.CompareTo(item2) > 0); case ComputeOperator.GreatThanOrEquals: return(item1.CompareTo(item2) >= 0); case ComputeOperator.LessThan: return(item1.CompareTo(item2) < 0); case ComputeOperator.LessThanOrEquals: return(item1.CompareTo(item2) <= 0); case ComputeOperator.NotEquals: return(!item1.Equals(item2)); case ComputeOperator.Equals: return(item1.Equals(item2)); default: throw ExceptionFactory.CreateInvalidObjectException(nameof(computeOperator), new { ComputeOperator = computeOperator.EnumToString(), Type = typeof(T).FullName }); } }
/// <summary> /// Computes as string. /// </summary> /// <param name="item1">The item1.</param> /// <param name="item2">The item2.</param> /// <param name="computeOperator">The compute operator.</param> /// <returns><c>true</c> if compute as true, <c>false</c> otherwise.</returns> private static bool ComputeAsString(string item1, string item2, ComputeOperator computeOperator) { switch (computeOperator) { case ComputeOperator.EndWith: return(!string.IsNullOrEmpty(item1) && !string.IsNullOrEmpty(item2) && item1.EndsWith(item2)); case ComputeOperator.StartWith: return(!string.IsNullOrEmpty(item1) && !string.IsNullOrEmpty(item2) && item1.StartsWith(item2)); case ComputeOperator.Equals: return(!string.IsNullOrEmpty(item1) && !string.IsNullOrEmpty(item2) && item1.Equals(item2)); case ComputeOperator.NotEquals: return(!string.IsNullOrEmpty(item1) && !string.IsNullOrEmpty(item2) && !item1.Equals(item2)); case ComputeOperator.Contains: return(!string.IsNullOrEmpty(item1) && !string.IsNullOrEmpty(item2) && item1.Contains(item2)); case ComputeOperator.NotContains: return(!string.IsNullOrEmpty(item1) && !string.IsNullOrEmpty(item2) && !item1.Contains(item2)); default: throw ExceptionFactory.CreateInvalidObjectException(nameof(computeOperator), new { ComputeOperator = computeOperator.EnumToString() }); } }
/// <summary> /// Determines whether [is compute operator] [the specified input]. /// </summary> /// <param name="input">The input.</param> /// <param name="computeOperator">The compute operator.</param> /// <returns><c>true</c> if [is compute operator] [the specified input]; otherwise, <c>false</c>.</returns> private bool IsComputeOperator(string input, out ComputeOperator computeOperator) { var result = BooleanSearchCore.ToComputeOperator(input); if (result.HasValue) { computeOperator = result.Value; return(true); } computeOperator = default(ComputeOperator); return(false); }
/// <summary> /// Computes as object. /// </summary> /// <param name="item1">The item1.</param> /// <param name="item2">The item2.</param> /// <param name="computeOperator">The compute operator.</param> /// <returns><c>true</c> if compute as true, <c>false</c> otherwise.</returns> private static bool ComputeAsObject(JObject item1, string item2, ComputeOperator computeOperator) { switch (computeOperator) { case ComputeOperator.Exists: return(item1 != null && !string.IsNullOrWhiteSpace(item2) && item1.GetProperty(item2) != null); default: throw ExceptionFactory.CreateInvalidObjectException(nameof(computeOperator), new { ComputeOperator = computeOperator.EnumToString() }); } }
/// <summary> /// Computes as array. /// </summary> /// <param name="item1">The item1.</param> /// <param name="item2">The item2.</param> /// <param name="computeOperator">The compute operator.</param> /// <returns><c>true</c> if compute as true, <c>false</c> otherwise.</returns> private static bool ComputeAsArray(JArray item1, string item2, ComputeOperator computeOperator) { switch (computeOperator) { case ComputeOperator.Contains: return(item1.Contains <JToken, string>(item2, x => x.ToObject <string>(), (x, y) => x.Equals(y, StringComparison.OrdinalIgnoreCase))); case ComputeOperator.NotContains: return(!item1.Contains <JToken, string>(item2, x => x.ToObject <string>(), (x, y) => x.Equals(y, StringComparison.OrdinalIgnoreCase))); default: throw ExceptionFactory.CreateInvalidObjectException(nameof(computeOperator), new { ComputeOperator = computeOperator.EnumToString() }); } }
/// <summary> /// Computes as boolean. /// </summary> /// <param name="item1">if set to <c>true</c> [item1].</param> /// <param name="item2">if set to <c>true</c> [item2].</param> /// <param name="computeOperator">The compute operator.</param> /// <returns><c>true</c> if compute as true, <c>false</c> otherwise.</returns> private static bool ComputeAsBoolean(bool item1, bool item2, ComputeOperator computeOperator) { switch (computeOperator) { case ComputeOperator.Equals: return(item1 == item2); case ComputeOperator.NotEquals: return(item1 != item2); default: throw ExceptionFactory.CreateInvalidObjectException(nameof(computeOperator), new { ComputeOperator = computeOperator.EnumToString() }); } }
/// <summary> /// To the expression string. /// </summary> /// <param name="computeOperator">The compute operator.</param> /// <returns>System.String.</returns> internal static string ToExpressionString(ComputeOperator computeOperator) { return(computeOperatorStrings[(int)computeOperator]); }