代码之家  ›  专栏  ›  技术社区  ›  Sonny Boy

LINQ-在一个列表中获取列表中的所有项?

  •  19
  • Sonny Boy  · 技术社区  · 14 年前

    我目前有一个对象列表,称为\u tables,其中每个对象都有另一个通过属性“Indexes”公开的对象列表。基本上,我希望最后得到一个列表,其中包含所有表的所有索引。

    以下是我目前掌握的情况:

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

    不幸的是,这似乎给了我另一个列表列表,但只有当索引列表包含多个值时。。。有没有什么方法可以将所有这些列表无循环地放在一起?

    4 回复  |  直到 11 年前
        1
  •  43
  •   Noldorin    14 年前

    你想用 SelectMany 扩展方法。

    _tables.SelectMany(t => t.Indexes)
    
        2
  •  6
  •   Anthony Pegram    14 年前

    除了tbischel的答案之外,下面还提供了查询表达式版本。

    var indexes = from TableInfo tab in _tables 
                  from index in tab.Indexes
                  select index;
    
        3
  •  5
  •   msarchet    14 年前

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

    或者你可以这样做

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

        4
  •  2
  •   Qasims    12 年前
    var rows = from item in table select item;