Ejemplo n.º 1
0
        private static Dictionary <string, QuerySpan> GetSpans(QuerySpan tokens)
        {
            if (tokens.First().Type != ODataTokenType.Identifier)
            {
                throw new InvalidOperationException();
            }
            var span   = new QuerySpan(tokens.List, tokens.First().Text, tokens.Start + 2);
            var result = new Dictionary <string, QuerySpan>(StringComparer.OrdinalIgnoreCase)
            {
                [span.Name] = span
            };

            for (var i = tokens.Start + 1; i < tokens.Start + tokens.Length; i++)
            {
                if (tokens.List[i].Type == ODataTokenType.Semicolon)
                {
                    span.Length = i - span.Start;
                    if ((i + 1) < tokens.Start + tokens.Length)
                    {
                        i++;
                        if (tokens.List[i].Type != ODataTokenType.Identifier)
                        {
                            throw new InvalidOperationException();
                        }
                        span = new QuerySpan(tokens.List, tokens.List[i].Text, i + 2);
                        result[span.Name] = span;
                    }
                }
            }
            span.Length = tokens.Start + tokens.Length - span.Start;
            return(result);
        }