Example #1
0
        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;
 }