C# Automapper地图采集<;T>;对单个具体对象
如何使用automapper将对象集合映射到具体类型的单个对象 样本: 型号:C# Automapper地图采集<;T>;对单个具体对象,c#,mapping,automapper,automapper-6,C#,Mapping,Automapper,Automapper 6,如何使用automapper将对象集合映射到具体类型的单个对象 样本: 型号: public class SystemOptionsModel { public string OptionID { get; set; } public string OptionValue { get; set; } } DTO: 我尝试使用以下映射配置将SystemOptions Model的ICollection映射到一个SystemOptions DTO: CreateMap<Sy
public class SystemOptionsModel
{
public string OptionID { get; set; }
public string OptionValue { get; set; }
}
DTO:
我尝试使用以下映射配置将SystemOptions Model的ICollection映射到一个SystemOptions DTO:
CreateMap<SystemOptionsModel, SystemOptionsDto>()
.ForMember(dest => dest.Deliverymode, o =>
{
o.Condition((src) => { return src.OptionID.Trim().ToLower().Equals("someString"); });
o.MapFrom(srs => (Deliverymode)Enum.Parse(typeof(Deliverymode), srs.OptionValue.Trim()));
});
CreateMap()
.FormMember(目标=>dest.Deliverymode,o=>
{
o、 条件((src)=>{return src.OptionID.Trim().ToLower().Equals(“someString”);});
o、 MapFrom(srs=>(Deliverymode)Enum.Parse(typeof(Deliverymode),srs.OptionValue.Trim());
});
结果,我得到了一个DTO列表,其中源集合中的每个项对应一个项
我也试过:
CreateMap<SystemOptionsModel, SystemOptionsDto>()
.ForMember(dest => dest.Deliverymode, o =>
{
o.MapFrom(src => src.OptionID.Trim().ToLower().Equals("someString") ? (Deliverymode?)Enum.Parse(typeof(Deliverymode), src.OptionValue.Trim()) : null);
});
CreateMap()
.FormMember(目标=>dest.Deliverymode,o=>
{
o、 MapFrom(src=>src.OptionID.Trim().ToLower().Equals(“someString”)?(Deliverymode?)枚举.Parse(typeof(Deliverymode),src.OptionValue.Trim()):null);
});
结果也是一个SystemOptionsDto列表,而不是一个SystemOptionsDto。根据解释,如果集合包含多个OptionID等于“someValue”的项,则不清楚如何转换值。也许这是不可能的。 解决办法是:
cfg.CreateMap<ICollection<SystemOptionsModel>, SystemOptionsDto>()
.ForMember(dest => dest.Deliverymode, opt => opt.ResolveUsing(
src => src.Where(i => i.OptionID.Trim().ToLower() == "someString")
.Select(option => (Deliverymode?)Enum.Parse(typeof(Deliverymode), option.OptionValue.Trim()))
.FirstOrDefault()));
cfg.CreateMap()
.FormMember(dest=>dest.Deliverymode,opt=>opt.ResolveUsing(
src=>src.Where(i=>i.OptionID.Trim().ToLower()==“someString”)
.Select(option=>(Deliverymode?)Enum.Parse(typeof(Deliverymode),option.OptionValue.Trim())
.FirstOrDefault());
Thissrc.OptionID.Trim().ToLower().Equals(“someString”)
将始终为false当然,监督:)。。。
cfg.CreateMap<ICollection<SystemOptionsModel>, SystemOptionsDto>()
.ForMember(dest => dest.Deliverymode, opt => opt.ResolveUsing(
src => src.Where(i => i.OptionID.Trim().ToLower() == "someString")
.Select(option => (Deliverymode?)Enum.Parse(typeof(Deliverymode), option.OptionValue.Trim()))
.FirstOrDefault()));