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)); }
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); }