LINQ - 如何获取列表中所有嵌套列表中的项?

22

我现在正在学习LINQ,需要一些帮助。我不知道我想要的是否可能,但如果必须打赌,我会赌它是可以实现的。

我目前有一个名为_tables的对象列表,每个对象都包含另一个通过属性“Indexes”公开的对象列表。基本上,我希望最终得到一个包含来自所有_tables的Index的列表。

以下是我迄今为止的代码:

var indexes = from TableInfo tab
              in _tables
              where tab.Indexes.Count > 0
              select tab.Indexes;

不幸的是,这似乎给我另一个列表的列表,但只有当索引列表包含多个值时... 有没有一种方法可以将所有这些列表结合在一起,而不使用循环?

4个回答

44

你想使用 SelectMany 扩展方法。

_tables.SelectMany(t => t.Indexes)

只需阅读此链接:http://community.bartdesmet.net/blogs/bart/archive/2008/08/19/probably-the-most-powerful-linq-operator-selectmany.aspx - Callum Rogers
如果t.indexes有另一个列表,我想例如获取Indexes内部的名称。 - Pxaml

6
除了tbischel的答案之外,你需要的查询表达式版本如下所示。
var indexes = from TableInfo tab in _tables 
              from index in tab.Indexes
              select index;

5

您不需要where子句,也不应该告诉它哪个tab是什么

而且您需要使用SelectMany

var indexes = (from tab in _tables).SelectMany(t => t.Indexes)

或者你可以像这样做

   var indexes = from tab in _tables
                  from t in tab.Indexes
                  select t;

那应该是更加熟悉的语法。

2
var rows = from item in table select item;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接