public IRequestable GetParameters(LambdaExpression lambdaExpression, TargetMethodType methodType, AggregationType aggType = AggregationType.Min)
        {
            IRequestable condition = null;

            switch (methodType)
            {
            case TargetMethodType.Projection: {
                switch (lambdaExpression.Body.NodeType)
                {
                case ExpressionType.Equal: {
                    condition = createSingleSelectionFunctionFromBinaryExpression(lambdaExpression);                                       // Select a variable with condition
                } break;

                case ExpressionType.New: {
                    condition = createMultipleSelectionFunction(lambdaExpression);                                       // Select many variables
                } break;

                case ExpressionType.Call: {
                    condition = createSingleSelectionFunction(lambdaExpression);                                       // Select a variable
                } break;

                case ExpressionType.Parameter: {
                    condition = new All();                                     // Select all with no condition
                } break;

                default: {
                    condition = createSingleSelectionFunctionFromBinaryExpression(lambdaExpression);                                       // Select a variable with condition
                } break;
                }
            } break;

            case TargetMethodType.Selection: {
                condition = createFilterForSelection(lambdaExpression);
            } break;

            case TargetMethodType.Aggregation: {
                switch (aggType)
                {
                case AggregationType.Count: {
                    condition = createCountFunction(lambdaExpression);
                } break;

                default: {
                    condition = createAggregationForAggregationFunction(lambdaExpression, aggType);
                } break;
                }
            } break;
            }

            return(condition);
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="ProxyMethodAttribute"/> class.
 /// </summary>
 /// <param name="methodType">The type of the target method.</param>
 /// <param name="name">The custom name of the method to proxy, if any.</param>
 public ProxyMethodAttribute(TargetMethodType methodType, string name = null)
 {
     this.methodType = methodType;
     this.name = name;
 }