Я собираюсь реализовать С# spec 7.16.2 "Перевод выражения запроса" в Roslyn. Однако я столкнулся с проблемой в 7.16.2.5 "Выделите предложения".
Он читает
Выражение запроса формы
from x in e select vпереводится в
( e ) . Select ( x => v )за исключением случаев, когда v является идентификатором x, перевод просто
( e )Например
from c in customers.Where(c => c.City == "London") select cпросто переведен в
customers.Where(c => c.City == "London")
Мой код не приводит к результату, соответствующему этому примеру, потому что (согласно строке "except when" ) я переводил from x in e select x в ( e ), а не только e. Таким образом, мой код переводит пример в
( customers.Where(c => c.City == "London") )
Является ли пример в спецификации неправильным, или мне нужно делать обработку, чтобы узнать, нужны ли круглые скобки? Если да, это где-то в спецификации?
Аналогично, 7.16.2.6 (предложения Groupby) говорит
Выражение запроса формы
from x in e group v by kпереводится в
( e ) . GroupBy ( x => k , x => v )за исключением случаев, когда v является идентификатором x, перевод
( e ) . GroupBy ( x => k )Пример
from c in customers group c.Name by c.Countryпереводится в
customers. GroupBy(c => c.Country, c => c.Name)
где снова в результате примера отсутствуют скобки, предложенные спецификацией.