System.Data.ExpressionParser.ParseAggregateArgument C# (CSharp) Метод

ParseAggregateArgument() приватный Метод

Parse the argument to an Aggregate function. The syntax is Func(child[(relation_name)].column_name) When the function is called we have already parsed the Aggregate name, and open paren
private ParseAggregateArgument ( FunctionId aggregate ) : ExpressionNode
aggregate FunctionId
Результат ExpressionNode
        private ExpressionNode ParseAggregateArgument(FunctionId aggregate)
        {
            Debug.Assert(_token == Tokens.LeftParen, "ParseAggregateArgument(): Invalid argument, token <> '('");

            bool child;
            string relname;
            string colname;

            Scan();

            try
            {
                if (_token != Tokens.Child)
                {
                    if (_token != Tokens.Name)
                        throw ExprException.AggregateArgument();

                    colname = NameNode.ParseName(_text, _start, _pos);
                    ScanToken(Tokens.RightParen);
                    return new AggregateNode(_table, aggregate, colname);
                }

                child = (_token == Tokens.Child);
                _prevOperand = Scalar;

                // expecting an '(' or '.'
                Scan();

                if (_token == Tokens.LeftParen)
                {
                    //read the relation name
                    ScanToken(Tokens.Name);
                    relname = NameNode.ParseName(_text, _start, _pos);
                    ScanToken(Tokens.RightParen);
                    ScanToken(Tokens.Dot);
                }
                else
                {
                    relname = null;
                    CheckToken(Tokens.Dot);
                }

                ScanToken(Tokens.Name);
                colname = NameNode.ParseName(_text, _start, _pos);
                ScanToken(Tokens.RightParen);
            }
            catch (Exception e) when (Common.ADP.IsCatchableExceptionType(e))
            {
                throw ExprException.AggregateArgument();
            }
            return new AggregateNode(_table, aggregate, colname, !child, relname);
        }