Я собираюсь реализовать С# 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)
где снова в результате примера отсутствуют скобки, предложенные спецификацией.