LINQ - 获取列表中列表中的所有项目?

时间:2010-07-16 16:40:32

标签: c# .net linq list

我正在努力学习LINQ的学习曲线,我真的可以使用一些帮助。我不知道我想要的是否可能,但如果我不得不下注,我打赌它是。

我目前有一个名为_tables的对象列表,其中每个对象都有一个通过属性“索引”公开的另一个对象列表。基本上,我想最终得到一个包含所有_tables的所有索引的List。

这是我到目前为止所拥有的:

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

不幸的是,这似乎给了我另一个列表列表,但只有在索引列表包含多个值的地方...有没有办法将所有这些列表放在一起而没有循环?

4 个答案:

答案 0 :(得分:39)

您想使用SelectMany扩展方法。

_tables.SelectMany(t => t.Indexes)

答案 1 :(得分:6)

除了tbischel的回答之外,您要查找的查询表达式版本如下。

var indexes = from TableInfo tab in _tables 
              from index in tab.Indexes
              select index;

答案 2 :(得分:4)

您不需要where子句,也不需要告诉它哪个选项卡

您需要使用SelectMany

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

或者你可以这样做

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

这应该是一个更熟悉的syntaz

答案 3 :(得分:2)

var rows = from item in table select item;