代码之家  ›  专栏  ›  技术社区  ›  leora Matt Lacey

使用linq,如何从另一个IEnumerable的属性创建IEnumerable<>

  •  1
  • leora Matt Lacey  · 技术社区  · 14 年前

    我有一个清单:

    IEnumerable<Person> people
    

    我想得到这个:

    IEnumerable<Dog> peoplesDogs
    

     IEnumerable<Dog> 
    
    4 回复  |  直到 14 年前
        1
  •  6
  •   LukeH    14 年前
    var peoplesDogs = people.SelectMany(p => p.Dogs);
    
        2
  •  1
  •   John Sheehan    14 年前
    var peoplesDogs = from p in people 
                      from d in p.Dogs
                      select d;
    
        3
  •  0
  •   devuxer    14 年前
    var peopleDogs = people.Select(p => p.Dogs)
    

    编辑

    IEnumerable<IEnumerable<Dog>> 但显然我们需要的只是 IEnumerable<Dog>

    正如卢卡的回答,你需要使用 SelectMany 要展平:

    var peopleDogs = people.SelectMany(p => p.Dogs)
    
        4
  •  0
  •   Mark Heath    14 年前

    你也可以

    var peoplesDogs = from p in people
                      from d in p.Dogs
                      select d;
    

    var peoplesDogs = people.SelectMany(p => p.Dogs)