Example #1
0
        public static FilterDefinition <T> HandleQueryUnitModel <T>(QueryUnit queryUnit)
        {
            if (queryUnit == null)
            {
                throw new ArgumentNullException("queryUnit");
            }
            if (queryUnit.Factors == null || !queryUnit.Factors.Any())
            {
                throw new ArgumentException("queryUnit.Factors至少包含一项");
            }

            List <FilterDefinition <T> > factorFilters = new List <FilterDefinition <T> >();

            foreach (var factorItem in queryUnit.Factors)
            {
                if (factorItem.ValueOperators == null || !factorItem.ValueOperators.Any())
                {
                    continue;
                }
                List <FilterDefinition <T> > minFilters = new List <FilterDefinition <T> >();
                foreach (var minItem in factorItem.ValueOperators)
                {
                    minFilters.Add(ToMogodbFilter <T>(minItem.QueryOperator, factorItem.Key, minItem.Value));
                }
                if (minFilters.Count == 1)
                {
                    factorFilters.Add(minFilters[0]);
                }
                else
                {
                    factorFilters.Add(Builders <T> .Filter.And(minFilters));
                }
            }

            if (!factorFilters.Any())
            {
                return(Builders <T> .Filter.Empty);
            }

            if (!string.IsNullOrEmpty(queryUnit.ElemMatchName))
            {
                return(Builders <T> .Filter.ElemMatch(queryUnit.ElemMatchName, Builders <T> .Filter.And(factorFilters)));
            }

            return(HandleFilterDefinitions(factorFilters, queryUnit.LogicalOperator));
        }
Example #2
0
        IUrlProvider IUrlProvider.SetUnit(QueryUnit Unit)
        {
            const string queryIdentifier = "units=";
            string       queryParameter  = string.Empty;

            switch (Unit)
            {
            case QueryUnit.Imperial:
                queryParameter = "imperial";
                break;

            case QueryUnit.Metric:
                queryParameter = "metric";
                break;

            case QueryUnit.Kelvin:
                return(this);
            }
            AppendQuery(string.Concat(queryIdentifier, queryParameter));
            return(this);
        }