我可以使用 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 列表中所有 Bar 中的所有 Widget 的列表?
Edit上面这句话我措辞错误,但代码反映了目标。我正在寻找所有小部件 ID 的列表,而不是小部件。
“不正确”的结果是未返回所有小部件 ID。
您的查询返回所有小部件 ID,而不是所有小部件。如果您只想要小部件,只需使用:
var q = source.SelectMany(foo => foo.Bar)
.SelectMany(bar => bar.Widget)
.ToList();
如果仍然给出“不正确的结果”,请解释一下way这是错误的结果。示例代码会非常有帮助:)
编辑:好的,如果你想要小部件 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();
如果您喜欢查询表达式格式。
这确实应该有效 - 如果是的话not工作,这表明您的数据有问题。
我们之前应该检查一下 - 这只是 LINQ to Objects,还是更高级的提供程序(例如 LINQ to SQL)?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)