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