У меня есть этот класс:
class ClassFrom
{
public int Id { get; set; }
public string Foo { get; set; }
public string Bar { get; set; }
}
Я хочу сопоставить это со следующим: свойство Id
становится ключом словаря:
class ClassTo
{
public string Foo { get; set; }
public string Bar { get; set; }
}
Dictionary<int, ClassTo> toDict
= mapper.Map<List<ClassFrom>, Dictionary<int, ClassTo>>(fromList);
Есть ли рекомендуемый способ сделать это?
Лучший способ сделать это с помощью Automapper - это небольшой запах кода. По сути, я дважды сопоставляю объект сначала ClassTo
, а затем KeyValuePair
через его конструктор:
var cfg = new MapperConfiguration(c =>
{
c.CreateMap<ClassFrom, ClassTo>();
c.CreateMap<ClassFrom, KeyValuePair<int, ClassTo>>()
.ForCtorParam("key", paramOptions => paramOptions.MapFrom(from => from.Id))
.ForCtorParam("value", paramOptions => paramOptions.MapFrom(from => from));
});
IMapper mapper = new AutoMapper.Mapper(cfg);
List<ClassFrom> fromList = new List<ClassFrom>
{
new ClassFrom { Id = 1, Foo = "foo1", Bar = "Bar1" },
new ClassFrom { Id = 2, Foo = "foo2", Bar = "Bar2" }
};
Dictionary<int, ClassTo> toDict
= mapper.Map<List<ClassFrom>, Dictionary<int, ClassTo>>(fromList);