我有以下代码段。
var files = query.ToList();
var testFile = Mapper.DynamicMap<EftFileDto>(files.First());
var filesDto = Mapper.DynamicMap<List<EftFileDto>>(files);
testFile
具有正确映射的值,但filesDto为空。
看来dynamicMap适用于单个项目,但不适用于列表?
files
是一个匿名对象列表。
编辑:如果我使用数组,它也不起作用。我可以让它工作,但是......
var filesDto = query.Select(Mapper.DynamicMap<EftFileDto>).ToList();
答案 0 :(得分:7)
在大多数映射方案中,我们知道我们要映射到的类型 编译时间。在某些情况下,直到知道源类型 运行时,尤其是在我使用动态类型或在其中的情况下 可扩展性场景。
DynamicMap调用为源类型创建配置 对象传入指定的目标类型。如果是两种类型 已经映射,AutoMapper跳过这一步(我可以调用 这个例子的DynamicMap多次)。
来源:http://lostechies.com/jimmybogard/2009/04/15/automapper-feature-interfaces-and-dynamic-mapping/
较短版本: DynamicMap 与调用 CreateMap 然后地图相同。
一些虚拟人类
public class Person
{
public string Name { get; set; }
public string Surname { get; set; }
public int Age { get; set; }
}
假设你有一份人员名单。
var persons = new List<Person>();
for (int i = 0; i < 100; i++)
{
persons.Add(new Person {
Name = String.Format("John {0}", i),
Surname = String.Format("Smith {0}", i),
Age = i });
}
然后你选择添加新房产的人。
var anonymousTypes = persons.Select(p => new {
p.Name,
p.Surname,
FullName = String.Format("{0}, {1}", p.Surname,p.Name) }).ToList();
要正确映射第一个人
var testFile = Mapper.DynamicMap<Person>(anonymousTypes.First());
要正确映射您将使用的所有人
var testFiles = anonymousTypes.Select(Mapper.DynamicMap<Person>).ToList();