private IComparable PerformArithmeticOperation(IEvaluable evaluable, IJSONDocument document, ArithmeticOperation operation) { IJsonValue value1, value2; if (!Evaluate(out value1, document)) { return(null); } if (!evaluable.Evaluate(out value2, document)) { return(null); } TypeCode actualType1, actualType2; FieldDataType fieldDataType1 = JSONType.GetJSONType(value1.Value, out actualType1); FieldDataType fieldDataType2 = JSONType.GetJSONType(value2.Value, out actualType2); if (fieldDataType1.CompareTo(fieldDataType2) != 0) { return(null); } return(Evaluator.PerformArithmeticOperation(value1, actualType1, value2, actualType2, operation, fieldDataType1)); }
public void ApplyValue(params object[] values) { if (values != null && values.Length > 0) { if (values[0] != null) { FieldDataType type = JSONType.GetJSONType(values[0]); switch (type) { case FieldDataType.Number: _sum += Convert.ToDouble(values[0]); break; case FieldDataType.DateTime: _sum += Convert.ToDateTime(values[0]).ToOADate(); break; } } } }
public override IJsonValue Evaluate(IJSONDocument document) { JSONResult result = (JSONResult)document; if (result != null) { IAggregation aggregation = result.GetAggregation(Name); if (aggregation != null) { FieldDataType dataType = JSONType.GetJSONType(aggregation.Value); switch (dataType) { case FieldDataType.Number: return(new NumberJsonValue(aggregation.Value)); case FieldDataType.String: return(new StringJsonValue((string)aggregation.Value)); case FieldDataType.Null: return(new NullValue()); case FieldDataType.Object: return(new ObjectJsonValue((IJSONDocument)aggregation.Value)); case FieldDataType.DateTime: return(new DateTimeJsonValue((DateTime)aggregation.Value)); case FieldDataType.Bool: return(new BooleanJsonValue((bool)aggregation.Value)); case FieldDataType.Array: return(new ArrayJsonValue((IJsonValue[])aggregation.Value)); } } } return(base.Evaluate(document)); }
public static IJsonValue Wrap(object value) { if (value is JValue) { value = ((JValue)value).Value; } FieldDataType dataType = JSONType.GetJSONType(value); IJsonValue jsonValue = null; switch (dataType) { case FieldDataType.Array: var values = new List <IJsonValue>(); if (value is System.Collections.ArrayList) { var array = (System.Collections.ArrayList)value; foreach (var obj in array) { values.Add(Wrap(obj)); } } else { var array = (Array)value; foreach (var obj in array) { values.Add(Wrap(obj)); } } jsonValue = new ArrayJsonValue(values.ToArray()); break; case FieldDataType.Bool: jsonValue = new BooleanJsonValue((bool)value); break; case FieldDataType.DateTime: jsonValue = new DateTimeJsonValue((DateTime)value); break; case FieldDataType.Null: jsonValue = new NullValue(); break; case FieldDataType.Number: jsonValue = new NumberJsonValue(value); break; case FieldDataType.Object: if (value.GetType() == typeof(JArray)) { var arr = (JArray)value; var vals = new List <IJsonValue>(); foreach (var obj in arr) { vals.Add(Wrap(obj)); } jsonValue = new ArrayJsonValue(vals.ToArray()); } else if (value.GetType() == typeof(IJsonValue[])) { var arr = (IJsonValue[])value; //var vals = new List<IJsonValue>(); //foreach (var obj in arr) //{ // vals.Add(Wrap(obj)); //} jsonValue = new ArrayJsonValue(arr); //vals.ToArray()); } else { jsonValue = new ObjectJsonValue(Serialize(value)); } break; case FieldDataType.String: jsonValue = new StringJsonValue((string)value); break; } return(jsonValue); }