Ejemplo n.º 1
0
        /// <summary> Converts all pivots (primary and secondary) in node to criterias </summary>
        /// <param name="queryNode"></param>
        /// <returns></returns>
        public static QueryNode ConvertPivotToCriterias(this QueryNode queryNode)
        {
            var pivotValues = queryNode?.PivotData.GetPivotValues();

            if (pivotValues == null)
            {
                return(queryNode);
            }

            var secondaryOnly = !queryNode.PivotData.PivotDefinition.StorageFeatures.HasFlag(PivotStorageFeatures.FilterByMainPivotValue);

            if (secondaryOnly)
            {
                pivotValues = pivotValues.Skip(1).ToDictionary(x => x.Key, x => x.Value);
            }

            var additionCriteriaGroup = queryNode.AddCriteriaGroup(CriteriaAppendType.And);

            // Add additional filter
            foreach (var additionalValue in pivotValues)
            {
                var subjectQuery = SingleQuery.CreateQuery.AddProperty(additionalValue.Key);

                var comparator = additionalValue.Value is IEnumerable <string>
                                 ?CriteriaComparator.In
                                 : CriteriaComparator.Eq;

                additionCriteriaGroup.AddCriteria(subjectQuery, comparator, additionalValue.Value);
            }
            return(queryNode);
        }