Exemplo n.º 1
0
        private static IMongoQuery QuantityQuery(String parameterName, Operator optor, String modifier, ValueExpression operand)
        {
            var quantity = operand.ToModelQuantity();

            Fhir.Metrics.Quantity q = quantity.ToSystemQuantity().Canonical();
            string    decimals      = Units.SearchableString(q);
            BsonValue value         = q.GetValueAsBson();

            List <IMongoQuery> queries = new List <IMongoQuery>();

            switch (optor)
            {
            case Operator.EQ:
                queries.Add(M.Query.Matches("decimals", new BsonRegularExpression("^" + decimals)));
                break;

            default:
                queries.Add(ExpressionQuery("value", optor, value));
                break;
            }

            if (quantity.System != null)
            {
                queries.Add(M.Query.EQ("system", quantity.System.ToString()));
            }

            queries.Add(M.Query.EQ("unit", q.Metric.ToString()));

            IMongoQuery query = M.Query.ElemMatch(parameterName, M.Query.And(queries));

            return(query);
        }