private static FilterType ReadAdvancedFilterType(JsonElement element) { var filterType = FilterType.Unknown; var comparisonKind = element .GetOptionalChild(ReportLayoutDocument.FilterCondition) ?.GetChild(ReportLayoutDocument.FilterComparison) ?.GetChild(ReportLayoutDocument.FilterComparisonKind); var negatedComparisonKind = element .GetOptionalChild(ReportLayoutDocument.FilterCondition) ?.GetChild(ReportLayoutDocument.FilterNot) ?.GetChild(ReportLayoutDocument.FilterExpression) ?.GetChild(ReportLayoutDocument.FilterComparison) ?.GetChild(ReportLayoutDocument.FilterComparisonKind); if (comparisonKind.HasValue && comparisonKind.Value.ValueKind == JsonValueKind.Number) { var kind = comparisonKind.Value.GetInt32(); filterType = kind switch { 0 => GetDirectComparisonFllterType(element), 1 => FilterType.IsGreaterThan, 2 => FilterType.IsGreaterThanOrEqualTo, 3 => FilterType.IsLessThan, 4 => FilterType.IsLessThanOrEqualTo, _ => FilterType.Unknown }; } if (negatedComparisonKind.HasValue && negatedComparisonKind.Value.ValueKind == JsonValueKind.Number) { var kind = negatedComparisonKind.Value.GetInt32(); filterType = kind switch { 0 => GetDirectComparisonFllterType(element, true), _ => FilterType.Unknown }; } return(filterType); }
private static FilterType GetDirectComparisonFllterType(JsonElement whereElement, bool negateFilter = false) { var valueElement = whereElement .GetOptionalChild(ReportLayoutDocument.FilterCondition) ?.GetOptionalChild(ReportLayoutDocument.FilterNot) ?.GetOptionalChild(ReportLayoutDocument.FilterExpression) ?.GetChild(ReportLayoutDocument.FilterComparison) ?.GetChild(ReportLayoutDocument.FilterRight) ?.GetChild(ReportLayoutDocument.FilterLiteral) ?.GetChild(ReportLayoutDocument.FilterValue); var nullValue = valueElement.HasValue && valueElement.Value.ValueKind == JsonValueKind.String && valueElement.Value.GetString() == ReportLayoutDocument.FilterBlankValue; return(negateFilter ? nullValue ? FilterType.IsNotBlank : FilterType.IsNot : nullValue ? FilterType.IsBlank : FilterType.Is); }