LINQ 扩展方法 .SelectMany() 以另一种形式编写

标签 linq

如何以另一个 .SelectMany() 形式编写此 LINQ 表达式?

var result = 
                    from a in numbersA
                    where a < 3
                    from b in numbersB
                    where b < 5
                    select new { a, b };

?

var result = numbersA.Where(x => x < 3).Select ..?

最佳答案

这是编译器将执行的操作的粗略翻译:

var result = numbersA.Where(a => a < 3)
                     .SelectMany(a => numbersB, (a, b) => new { a, b })
                     .Where(z => z.b < 5)
                     .Select(z => new { z.a, z.b });

现在您可以更有效地编写它:

var result = numbersA.Where(a => a < 3)
                     .SelectMany(a => numbersB.Where(b => b < 5),
                                 (a, b) => new { a, b });

...但这不是编译器会做的。目前尚不清楚您的目标是查看编译器执行的操作,还是仅编写查询。

关于LINQ 扩展方法 .SelectMany() 以另一种形式编写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12958442/

相关文章:

c# - 如何对分组列表的列表进行分组?

c# - 加速简单的 LINQ 查询

c# - 使用 lambda 从嵌套列表中分离值

c# - 更新 IEnumerable<XElement> 并将更改保存在 XML 文档中 C#

c# - 使用 LINQ 在两个日期和时间之间进行搜索

c# - 如果 Sum() 值返回 Null 使用 0,当前是否将其强制转换为可为 null 的 double 值?

c# - 您如何在连接中包含第一个表中的所有字段,以及剩余的一些字段?

c# - LINQ 如何按升序对列表进行排序

xml - 在 Visual Basic 9 中将一个元素转换为另一个元素的 LINQ 或 XSLT

c# - 在 View 中显示来自 ViewModel 的平均值