public override void SetUp () { base.SetUp (); _keySelector = ExpressionHelper.CreateLambdaExpression<int, bool> (i => i > 5); _elementSelector = ExpressionHelper.CreateLambdaExpression<int, string> (i => i.ToString()); _nodeWithElementSelector = new GroupByExpressionNode (CreateParseInfo (SourceNode, "g"), _keySelector, _elementSelector); _nodeWithoutElementSelector = new GroupByExpressionNode (CreateParseInfo (SourceNode, "g"), _keySelector, null); }
private static MethodCallExpressionParseInfo CreateParseInfoWithGroupNode( MethodCallExpressionParseInfo parseInfo, LambdaExpression keySelector, LambdaExpression elementSelectorOrResultSelector, LambdaExpression resultSelectorOrNull) { var optionalElementSelector = GetOptionalElementSelector(elementSelectorOrResultSelector, resultSelectorOrNull); var sourceItemType = ReflectionUtility.GetItemTypeOfClosedGenericIEnumerable( parseInfo.ParsedExpression.Arguments[0].Type, "parseInfo.ParsedExpression.Arguments[0].Type"); MethodCallExpression simulatedGroupByCallWithoutResultSelector; if (optionalElementSelector == null) { simulatedGroupByCallWithoutResultSelector = Expression.Call( typeof(Enumerable), "GroupBy", new[] { sourceItemType, keySelector.Body.Type }, parseInfo.ParsedExpression.Arguments[0], keySelector); } else { simulatedGroupByCallWithoutResultSelector = Expression.Call( typeof(Enumerable), "GroupBy", new[] { sourceItemType, keySelector.Body.Type, optionalElementSelector.Body.Type }, parseInfo.ParsedExpression.Arguments[0], keySelector, optionalElementSelector); } var simulatedParseInfo = new MethodCallExpressionParseInfo(parseInfo.AssociatedIdentifier, parseInfo.Source, simulatedGroupByCallWithoutResultSelector); var groupBySourceNode = new GroupByExpressionNode(simulatedParseInfo, keySelector, optionalElementSelector); return(new MethodCallExpressionParseInfo(parseInfo.AssociatedIdentifier, groupBySourceNode, parseInfo.ParsedExpression)); }
private static MethodCallExpressionParseInfo CreateParseInfoWithGroupNode ( MethodCallExpressionParseInfo parseInfo, LambdaExpression keySelector, LambdaExpression elementSelectorOrResultSelector, LambdaExpression resultSelectorOrNull) { var optionalElementSelector = GetOptionalElementSelector (elementSelectorOrResultSelector, resultSelectorOrNull); var sourceItemType = ReflectionUtility.GetItemTypeOfClosedGenericIEnumerable ( parseInfo.ParsedExpression.Arguments[0].Type, "parseInfo.ParsedExpression.Arguments[0].Type"); MethodCallExpression simulatedGroupByCallWithoutResultSelector; if (optionalElementSelector == null) { simulatedGroupByCallWithoutResultSelector = Expression.Call ( typeof (Enumerable), "GroupBy", new[] { sourceItemType, keySelector.Body.Type }, parseInfo.ParsedExpression.Arguments[0], keySelector); } else { simulatedGroupByCallWithoutResultSelector = Expression.Call ( typeof (Enumerable), "GroupBy", new[] { sourceItemType, keySelector.Body.Type, optionalElementSelector.Body.Type }, parseInfo.ParsedExpression.Arguments[0], keySelector, optionalElementSelector); } var simulatedParseInfo = new MethodCallExpressionParseInfo(parseInfo.AssociatedIdentifier, parseInfo.Source, simulatedGroupByCallWithoutResultSelector); var groupBySourceNode = new GroupByExpressionNode (simulatedParseInfo, keySelector, optionalElementSelector); return new MethodCallExpressionParseInfo (parseInfo.AssociatedIdentifier, groupBySourceNode, parseInfo.ParsedExpression); }