如何将以下查询翻译为功能调用?我知道编译器在幕后执行此操作但不知道如何查看结果
var query = from item in Enumerable.Range(0, 10)
from item2 in Enumerable.Range(item, 10)
from item3 in Enumerable.Range(item2, 10)
select new { item, item2, item3 };
答案 0 :(得分:6)
在这种情况下,它使用SelectMany
和一个名为透明标识符的概念来保留现有的范围变量。因此,您的查询将转换为:
var query = Enumerable.Range(0, 10)
.SelectMany(item => Enumerable.Range(item, 10),
(item, item2) => new { item, item2 })
.SelectMany(z => Enumerable.Range(z.item2, 10),
(z, item3) => new { z.item, z.item2, item3 });
(在这种情况下,z
是透明标识符。如果在where
子句之后存在select
子句或from
以外的任何子句,则另一个将引入透明标识符。)
翻译全部在C#语言规范第7.16节中描述。