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