2014-12-04 86 views
0

我有一個Foo對象的集合,每個對象都有一個集合。項目從兒童收集實體集成到dtos集合

我想要的是將我收集的Foo's投影到FooDTO,它將是一個扁平版本,每個孩子一個。我怎樣才能做到這一點?

例如:

public class Foo 
{ 
    public int Id { get; set; } 
    public List<Bar> Bar { get; set; } 
} 

public class Bar 
{ 
    public string Name; 
} 

public class FooDto 
{ 
    public int Id { get; set; } 
    public string BarName { get; set; } 
} 

所以如果我有

 var foos = new List<Foo> 
     { 
      new Foo 
      { 
       Id = 1, 
       Bar = new List<Bar> 
       { 
        new Bar {Name = "foobar"}, 
        new Bar {Name = "barfoo"} 
       } 
      }, 
      new Foo 
      { 
       Id = 2, 
       Bar = new List<Bar> 
       { 
        new Bar {Name = "2foobar"}, 
        new Bar {Name = "2barfoo"} 
       } 
      } 
     }; 

var collection = Mapper.Some_kind_of_Magic(foos); 

集將是這樣的:

[ 
    new FooDto{ Id = 1, BarName = "foobar"}, 
    new FooDto{ Id = 1, BarName = "barfoo" } 
    new FooDto{ Id = 2, BarName = "2foobar"}, 
    new FooDto{ Id = 2, BarName = "2barfoo" } 
] 

我該怎麼辦呢?地圖可以嗎?

回答

0

您可以使用SelectMany結果選擇器來展平集合。像這樣:

var collection = foos.SelectMany(
           l => l.Bar, 
           (foo, bar) => new FooDto 
               { 
                Id = foo.Id, 
                BarName = bar.BarName 
               }); 

如果您希望集合作爲列表,您可以追加.ToList()。

+0

謝謝,這很接近我最終做的。我曾希望用Automapper來做,但我認爲這不可能。 – 2014-12-17 04:53:59