我正在尝试在 Roslyn 中实现 C# 规范 7.16.2“查询表达式翻译”。但是,我在 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")
我的代码不会产生与示例匹配的结果,因为(根据“除了何时”行)我翻译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)
示例结果再次缺少规范建议的括号。