Beispiel #1
0
        public static Expression GetMergeExpression(string query, Type itemType)
        {
            EvoQLBuilder builder = new EvoQLBuilder(query);

            ParameterExpression parameterExpression;
            EvoQLExpression     parse;

            var filterexpr = builder.GetFilterExpression(out parse, out parameterExpression);

            var get = parse.Tree as GetExpression;

            var isCount = get.Select == "Count";
            var select  = new SelectDescriptor {
                SourcePath = get.Select, Aggregate = isCount ? "Count" : "Sum", TargetPath = isCount ? "_Count" : get.Select
            };

            var mapreduceexpr     = GetReduceExpression(query, itemType);
            var resultType        = mapreduceexpr.GetType().GetProperty("ReturnType").GetValue(mapreduceexpr, null) as Type;
            var resultElementType = ReduceExpressionGeneration.GetTypeOfEnumerable(resultType);

            //Expression mergeExpr = ReduceExpressionGeneration.GetMergeExpression(select, resultElementType);

            var mergeexpr = ReduceExpressionGeneration.GetMergeInvocationExpression(select, resultType);

            return(mergeexpr);
        }