c# - 将查询理解转换为 LINQ 中的可枚举扩展方法

标签 c# linq list-comprehension

如何将以下查询转换为函数调用?我知道编译器在幕后执行此操作,但不知道我将如何查看结果

        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 };

最佳答案

在这种情况下,它使用 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 是透明标识符。如果在最后一个 from 子句,将引入另一个透明标识符。)

翻译都在 C# language specification, section 7.16 中描述。 .

关于c# - 将查询理解转换为 LINQ 中的可枚举扩展方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4322260/

相关文章:

c# - 什么样的,是否存在这样的数据框架?

list - 生成其他列表中的差距列表。输入错误阻止我,

c# - 将 JSON curl 转换为 C#

c# - 将大文件上传到 MinIO 服务器时出错

c# - 在日期中设置特定的一天

c# - 如何在 C# 中执行 "Pointer to Pointer"?

c# - 与 NULL 比较时的 LINQ 和延迟执行

c# - 无法使用集合初始值设定项初始化类型 '',因为它未实现 'System.Collections.IEnumerable'

python - 如何根据另一个列表中的阈值对一个列表中的值进行分类?

python - 仅使用列表理解构建列表,没有函数