从具有子集合的实体到ftned dtos集合的项目

时间:2014-12-04 22:11:11

标签: c# automapper

我有一个Foo对象的集合,每个对象都有一个Bars集合。

我想要的是将我的Foo系列投影到FooDTO,这将是一个扁平版本,每个孩子一个。我怎么能这样做?

e.g。 :

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" } 
]

我该怎么办?是否可以使用地图?

1 个答案:

答案 0 :(得分:0)

您可以将SelectMany结果选择器一起使用,以展开收藏。像这样:

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

如果您希望将集合作为列表,则可以附加.ToList()。