Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 基于源映射到备用目标类_C#_Automapper - Fatal编程技术网

C# 基于源映射到备用目标类

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[

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["_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”);
FooTypeBarType都具有与源类型内部字典中单独键的值相对应的内部属性

为了正确映射这些值,我需要确保它们存在,在本例中,这是由_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));