C# 基于源映射到备用目标类
Automapper允许您定义映射并使用以下语法调用它:C# 基于源映射到备用目标类,c#,automapper,C#,Automapper,Automapper允许您定义映射并使用以下语法调用它: Mapper.CreateMap<Order, OrderDto>(); OrderDto dto = Mapper.Map<OrderDto>(order); Mapper.CreateMap(); OrderDto-dto=Mapper.Map(order); 是否可以使用排序谓词指定目标类型 Mapper.CreateMap<Order, FooType>().Where(s => s[
Mapper.CreateMap<Order, OrderDto>();
OrderDto dto = Mapper.Map<OrderDto>(order);
Mapper.CreateMap();
OrderDto-dto=Mapper.Map(order);
是否可以使用排序谓词指定目标类型
Mapper.CreateMap<Order, FooType>().Where(s => s["_type"].ToString() == "Foo");
Mapper.CreateMap<Order, BarType>().Where(s => s["_type"].ToString() == "Bar");
Mapper.CreateMap()。其中(s=>s[“\u type”]。ToString()==“Foo”);
Mapper.CreateMap()。其中(s=>s[“\u type”].ToString()==“Bar”);
FooType和BarType都具有与源类型内部字典中单独键的值相对应的内部属性
为了正确映射这些值,我需要确保它们存在,在本例中,这是由_type键的值决定的
编辑:如果可能,使用Mapper.Map()的语法是什么 您可以为每个属性设置贴图条件,查看以下示例:
Mapper.CreateMap<Foo,Bar>()
.ForMember(dest => dest.baz, opt => opt.Condition(src => (src.baz >= 0)));
Mapper.CreateMap()
.ForMember(dest=>dest.baz,opt=>opt.Condition(src=>(src.baz>=0));
及
Mapper.CreateMap()
.FormMember(目标=>目标值,
opt=>opt.MapFrom
(src=>src.Value1.StartsWith(“A”)?src.Value1:src.Value2);
如果我给出了不正确的答案,请详细描述要映射的属性,也许我只是误解了你。那么假设你可以这样做,你实际的Mapper.map
代码会是什么样子?你是想映射到一个对象,还是一个动态类型,或者..?@stuartd问得好-我不确定它会是什么。在我看来,它的工作原理与Ninject类似,您可以为给定的源类型定义x数量的映射,然后使用上下文绑定来选择适当的目标类型。仅使用源类型调用Map将使其根据预配置的映射自动查找正确的目标类型。看起来Automapper Github页面上出现了一个问题,允许对映射使用鉴别器,不确定这是否对我有帮助-问题是如何根据源对象的属性确定目标对象的类型。
Mapper.CreateMap<Source, Target>()
.ForMember(dest => dest.Value,
opt => opt.MapFrom
(src => src.Value1.StartsWith("A") ? src.Value1 : src.Value2));