private IEnumerable <ColumnSelectionExpression> ParseProjection(NewExpression expression, Expression fieldsParameter) { for (var i = 0; i < expression.Arguments.Count; i++) { MemberInfo member = expression.Members[i]; var argument = expression.Arguments[i]; switch (argument.NodeType) { case ExpressionType.MemberAccess: yield return(ParseColumnSelection((MemberExpression)argument, member, fieldsParameter)); break; case ExpressionType.Call: var call = ((MethodCallExpression)argument); var fieldSelection = ParseColumnSelection((MemberExpression)call.Arguments[0], member, fieldsParameter); var aggregation = new FieldAggregationExpression(call.Method.Name); yield return(new FieldSelectionExpression(fieldSelection, aggregation)); break; default: throw new NotImplementedException(); } } }
public FieldSelectionExpression(FieldSelectionExpression selection, FieldAggregationExpression aggregation) : base((string)selection.Alias) { FieldName = selection.FieldName; Aggregation = aggregation; }