public static bool AcceptsEvent(this AdvancedFilterSetting filter, EventGridEvent gridEvent) { var retVal = filter == null; if (retVal) { return(true); } // filter is not null if (!gridEvent.TryGetValue(filter.Key, out var value)) { return(false); } switch (filter.OperatorType) { case AdvancedFilterSetting.OperatorTypeEnum.NumberGreaterThan: retVal = Try(() => value.ToNumber() > filter.Value.ToNumber()); break; case AdvancedFilterSetting.OperatorTypeEnum.NumberGreaterThanOrEquals: retVal = Try(() => value.ToNumber() >= filter.Value.ToNumber()); break; case AdvancedFilterSetting.OperatorTypeEnum.NumberLessThan: retVal = Try(() => value.ToNumber() < filter.Value.ToNumber()); break; case AdvancedFilterSetting.OperatorTypeEnum.NumberLessThanOrEquals: retVal = Try(() => value.ToNumber() <= filter.Value.ToNumber()); break; case AdvancedFilterSetting.OperatorTypeEnum.NumberIn: retVal = Try(() => (filter.Values ?? new object[0]).Select(v => v.ToNumber()).Contains(value.ToNumber())); break; case AdvancedFilterSetting.OperatorTypeEnum.NumberNotIn: retVal = Try(() => !(filter.Values ?? new object[0]).Select(v => v.ToNumber()).Contains(value.ToNumber())); break; case AdvancedFilterSetting.OperatorTypeEnum.BoolEquals: retVal = Try(() => Convert.ToBoolean(value) == Convert.ToBoolean(filter.Value)); break; case AdvancedFilterSetting.OperatorTypeEnum.StringContains: { // a string cannot be considered to contain null or and empty string var valueAsString = value as string; var filterValueAsString = filter.Value as string; retVal = Try(() => !string.IsNullOrEmpty(filterValueAsString) && !string.IsNullOrEmpty(valueAsString) && valueAsString.Contains(filterValueAsString, StringComparison.OrdinalIgnoreCase)); } break; case AdvancedFilterSetting.OperatorTypeEnum.StringBeginsWith: { // null or empty values cannot be considered to be the beginning character of a string var valueAsString = value as string; var filterValueAsString = filter.Value as string; retVal = Try(() => !string.IsNullOrEmpty(filterValueAsString) && !string.IsNullOrEmpty(valueAsString) && valueAsString.StartsWith(filterValueAsString, StringComparison.OrdinalIgnoreCase)); } break; case AdvancedFilterSetting.OperatorTypeEnum.StringEndsWith: { // null or empty values cannot be considered to be the end character of a string var valueAsString = value as string; var filterValueAsString = filter.Value as string; retVal = Try(() => !string.IsNullOrEmpty(filterValueAsString) && !string.IsNullOrEmpty(valueAsString) && valueAsString.EndsWith(filterValueAsString, StringComparison.OrdinalIgnoreCase)); } break; case AdvancedFilterSetting.OperatorTypeEnum.StringIn: retVal = Try(() => (filter.Values ?? new object[0]).Select(v => Convert.ToString(v)?.ToUpper()).Contains(Convert.ToString(value)?.ToUpper())); break; case AdvancedFilterSetting.OperatorTypeEnum.StringNotIn: retVal = Try(() => !(filter.Values ?? new object[0]).Select(v => Convert.ToString(v)?.ToUpper()).Contains(Convert.ToString(value)?.ToUpper())); break; } return(retVal); }
public static bool AcceptsEvent(this AdvancedFilterSetting filter, EventGridEvent gridEvent) { var retVal = filter == null; if (!retVal) { // filter is not null if (gridEvent.TryGetValue(filter.Key, out var value)) { switch (filter.OperatorType) { case AdvancedFilterSetting.OperatorTypeEnum.NumberGreaterThan: retVal = Try(() => value.ToNumber() > filter.Value.ToNumber()); break; case AdvancedFilterSetting.OperatorTypeEnum.NumberGreaterThanOrEquals: retVal = Try(() => value.ToNumber() >= filter.Value.ToNumber()); break; case AdvancedFilterSetting.OperatorTypeEnum.NumberLessThan: retVal = Try(() => value.ToNumber() < filter.Value.ToNumber()); break; case AdvancedFilterSetting.OperatorTypeEnum.NumberLessThanOrEquals: retVal = Try(() => value.ToNumber() <= filter.Value.ToNumber()); break; case AdvancedFilterSetting.OperatorTypeEnum.NumberIn: retVal = Try(() => (filter.Values ?? new object[0]).Select(v => v.ToNumber()).Contains(value.ToNumber())); break; case AdvancedFilterSetting.OperatorTypeEnum.NumberNotIn: retVal = Try(() => !(filter.Values ?? new object[0]).Select(v => v.ToNumber()).Contains(value.ToNumber())); break; case AdvancedFilterSetting.OperatorTypeEnum.BoolEquals: retVal = Try(() => Convert.ToBoolean(value) == Convert.ToBoolean(filter.Value)); break; case AdvancedFilterSetting.OperatorTypeEnum.StringContains: // a string cannot be considered to contain null or and empty string retVal = Try(() => !string.IsNullOrEmpty(Convert.ToString(filter.Value)) && Convert.ToString(value).ToUpper().Contains(Convert.ToString(filter.Value).ToUpper())); break; case AdvancedFilterSetting.OperatorTypeEnum.StringBeginsWith: // null or empty values cannot be considered to be the beginning character of a string retVal = Try(() => !string.IsNullOrEmpty(Convert.ToString(filter.Value)) && Convert.ToString(value).ToUpper().StartsWith(Convert.ToString(filter.Value).ToUpper())); break; case AdvancedFilterSetting.OperatorTypeEnum.StringEndsWith: // null or empty values cannot be considered to be the end character of a string retVal = Try(() => !string.IsNullOrEmpty(Convert.ToString(filter.Value)) && Convert.ToString(value).ToUpper().EndsWith(Convert.ToString(filter.Value).ToUpper())); break; case AdvancedFilterSetting.OperatorTypeEnum.StringIn: retVal = Try(() => (filter.Values ?? new object[0]).Select(v => Convert.ToString(v).ToUpper()).Contains(Convert.ToString(value).ToUpper())); break; case AdvancedFilterSetting.OperatorTypeEnum.StringNotIn: retVal = Try(() => !(filter.Values ?? new object[0]).Select(v => Convert.ToString(v).ToUpper()).Contains(Convert.ToString(value).ToUpper())); break; } } } return(retVal); }