当前位置:  开发笔记 > 编程语言 > 正文

选择多个三个层次

如何解决《选择多个三个层次》经验,为你挑选了1个好方法。

我可以使用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.



1> Jon Skeet..:

您的查询返回所有窗口小部件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)?

推荐阅读
凹凸曼00威威_694
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有