blu*_*blu 18 c# generics lambda list
我可以使用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();
Run Code Online (Sandbox Code Playgroud)
这给了我Foo列表中所有Bar ID的列表.当我尝试深入三级时,返回错误的结果.
var q = source.SelectMany(foo => foo.Bar)
.SelectMany(bar => bar.Widget)
.Select(widget => widget.WidgetId)
.ToList();
Run Code Online (Sandbox Code Playgroud)
我应该如何使用SelectMany获取Foos列表中所有条形图中所有小部件的列表?
编辑 我错过上述句子,但代码反映了目标.我正在寻找所有Widget ID的列表,而不是小部件.
"不正确"的结果并非返回所有窗口小部件ID.
Jon*_*eet 33
您的查询返回所有窗口小部件ID,而不是所有窗口小部件.如果您只想要小部件,只需使用:
var q = source.SelectMany(foo => foo.Bar)
.SelectMany(bar => bar.Widget)
.ToList();
Run Code Online (Sandbox Code Playgroud)
如果仍然给出"不正确的结果",请以何种方式解释这是不正确的结果.示例代码非常有用:)
编辑:好的,如果你想要小部件ID,你的原始代码应该没问题:
var q = source.SelectMany(foo => foo.Bar)
.SelectMany(bar => bar.Widget)
.Select(widget => widget.WidgetId)
.ToList();
Run Code Online (Sandbox Code Playgroud)
那也可以写成
var q = (from foo in source
from bar in foo.Bar
from widget in bar.Widget
select widgetId).ToList();
Run Code Online (Sandbox Code Playgroud)
如果你喜欢查询表达式格式.
这确实应该努力-如果它不工作,这表明有什么东西不对您的数据.
我们之前应该检查过 - 这只是LINQ to Objects,还是一个更高级的提供者(例如LINQ to SQL)?
| 归档时间: |
|
| 查看次数: |
20589 次 |
| 最近记录: |