gpt4 book ai didi

c# - SelectMany 三层深

转载 作者:IT王子 更新时间:2023-10-29 04:47:24 27 4
gpt4 key购买 nike

我可以使用 SelectMany 展平集合中子集合的结果:

 // a list of Foos, a Foo contains a List of Bars
var source = new List<Foo>() { ... };

var q = source.SelectMany(foo => foo.Bar)
.Select(bar => bar.barId)
.ToList();

这为我提供了 Foo 列表中所有 Bar ID 的列表。当我尝试深入三层时,返回了不正确的结果。

 var q = source.SelectMany(foo => foo.Bar)
.SelectMany(bar => bar.Widget)
.Select(widget => widget.WidgetId)
.ToList();

我应该如何使用 SelectMany 来获取我的 Foos 列表中所有 Bars 中的所有 Widget 的列表?

编辑我对上面的句子措辞不当,但代码反射(reflect)了目标。我正在寻找所有小部件 ID 的列表,而不是小部件。

“不正确”的结果是没有返回所有的小部件 ID。

最佳答案

您的查询返回所有小部件 ID,而不是所有小部件。如果您只想要小部件,只需使用:

var q = source.SelectMany(foo => foo.Bar)
.SelectMany(bar => bar.Widget)
.ToList();

如果仍然给出“不正确的结果”,请以方式解释这是不正确的结果。示例代码会很有帮助:)

编辑:好的,如果您想要小部件 ID,您的原始代码应该没问题:

var q = source.SelectMany(foo => foo.Bar)
.SelectMany(bar => bar.Widget)
.Select(widget => widget.WidgetId)
.ToList();

也可以写成

var q = (from foo in source
from bar in foo.Bar
from widget in bar.Widget
select widgetId).ToList();

如果您喜欢查询表达式格式。

这确实应该有效 - 如果它有效,则表明您的数据有问题。

我们之前应该检查一下 - 这只是 LINQ to Objects,还是更高级的提供程序(例如 LINQ to SQL)?

关于c# - SelectMany 三层深,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/640415/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com