我有一个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" }
]
我该怎么办?是否可以使用地图?
答案 0 :(得分:0)
您可以将SelectMany与结果选择器一起使用,以展开收藏。像这样:
var collection = foos.SelectMany(
l => l.Bar,
(foo, bar) => new FooDto
{
Id = foo.Id,
BarName = bar.BarName
});
如果您希望将集合作为列表,则可以附加.ToList()。