/// <summary>
        /// Gets the component values operator.
        /// </summary>
        /// <param name="sel">The values selection of a component.</param>
        /// <returns>The operator to use for the values in <paramref name="sel"/></returns>
        private static string GetComponentValuesOperator(IComplexDataQuerySelection sel)
        {
            string componentValuesOperator = " OR ";

            var orderedOperatorEnumTypes = sel.Values.Where(value => value.OrderedOperator != null).Select(value => value.OrderedOperator.EnumType).Distinct().ToArray();
            if (orderedOperatorEnumTypes.Length == 1)
            {
                switch (orderedOperatorEnumTypes[0])
                {
                    case OrderedOperatorEnumType.NotEqual:
                        componentValuesOperator = " AND ";
                        break;
                }
            }
            else if (orderedOperatorEnumTypes.Length == 0)
            {
                var textOperatorEnumTypes = sel.Values.Where(value => value.TextSearchOperator != null).Select(value => value.TextSearchOperator.EnumType).Distinct().ToArray();
                if (textOperatorEnumTypes.Length == 1)
                {
                    switch (textOperatorEnumTypes[0])
                    {
                        case TextSearchEnumType.NotEqual:
                            componentValuesOperator = " AND ";
                            break;
                    }
                }
            }

            return componentValuesOperator;
        }
        /// <summary>
        /// Builds the complex data query implementation.
        /// </summary>
        /// <param name="freqCriteria">The frequency criteria.</param>
        /// <returns>
        /// The <see cref="ComplexDataQueryImpl"/>
        /// </returns>
        private ComplexDataQueryImpl BuildComplexDataQueryImpl(IComplexDataQuerySelection freqCriteria)
        {
            ISet<IComplexDataQuerySelection> sections = new HashSet<IComplexDataQuerySelection>();
            sections.Add(freqCriteria);

            ICollection<IComplexDataQuerySelectionGroup> collection = new[]
                                                                          {
                                                                              new ComplexDataQuerySelectionGroupImpl(
                                                                                  sections,
                                                                                  null,
                                                                                  OrderedOperator.GetFromEnum(OrderedOperatorEnumType.Equal),
                                                                                  null,
                                                                                  OrderedOperator.GetFromEnum(OrderedOperatorEnumType.Equal),
                                                                                  null)
                                                                          };

            var complexDataQueryImpl = new ComplexDataQueryImpl(
                null,
                null,
                null,
                this._dataStructureObject,
                this._dataflowObject,
                null,
                null,
                0,
                null,
                false,
                null,
                DimensionAtObservation.GetFromEnum(DimensionAtObservationEnumType.Time).Value,
                false,
                DataQueryDetail.GetFromEnum(DataQueryDetailEnumType.Full),
                collection);
            return complexDataQueryImpl;
        }
        /// <summary>
        /// Gets the parameter builder.
        /// </summary>
        /// <param name="complexDataQuerySelection">The complex data query selection.</param>
        /// <returns>The <see cref="IParameterBuilder"/></returns>
        private static IParameterBuilder GetParameterBuilder(IComplexDataQuerySelection complexDataQuerySelection)
        {
            IParameterBuilder builder;
            if (complexDataQuerySelection.ShouldUseAnd())
            {
                builder = new ParameterBuilderAnd();
            }
            else
            {
                builder = new ParameterBuilderOr();
            }

            return builder;
        }