我可以使用SelectMany在集合中展平子集合的结果:
// a list of Foos, a Foo contains a List of Bars var source = new List() { ... }; 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列表中所有条形图中所有小部件的列表?
编辑 我错过上述句子,但代码反映了目标.我正在寻找所有Widget 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)?