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