[英]AutoMapper map one list to two equally sized lists with derived properties
因此,我有一个带有一个列表的源对象,该列表包含两种类型的值,但是我希望目标具有两个列表,每个列表一个,但具有相同的结果属性。 我希望这里的例子可以自我解释。
我的资料来源:
public class SourceObject
{
public SourceObject()
{
SourceList = new List<AnotherSourceObject>();
}
public IList<AnotherSourceObject> SourceList { get; private set; }
//some other properties
}
public class AnotherSourceObject
{
public int Number { get; set; }
public decimal Value1 { get; set; }
public decimal Value2 { get; set; }
public decimal Total { get; set; }
}
我的目的地:
public class DestObject
{
public DestObject()
{
ValueOneList = new List<AnotherDestObject>();
ValueOneList = new List<AnotherDestObject>();
}
public IList<AnotherDestObject> ValueOneList { get; private set; }
public IList<AnotherDestObject> ValueTwoList { get; private set; }
//some other properties that map perfectly
}
public class AnotherDestObject
{
public int Number { get; set; }
public decimal Value { get; set; }
}
我的Automapper映射:
Mapper.CreateMap<Source, DestObject>()
.ForMember(dest => dest.ValueOneList, opt => opt.MapFrom(source => source.SourceList)) //get value1 to Value
.ForMember(dest => dest.ValueTwoList, opt => opt.MapFrom(source => source.SourceList)) //get value2 to Value
您可以使用AfterMap
如果您不小心制定者private
:
Mapper.CreateMap<Source, DestObject>()
.AfterMap((src, dest) =>
{
foreach (var item in src.SourceList)
{
dest.ValueOneList.Add(new AnotherDestObject { Number = item.Number, Value = item.Value1 });
dest.ValueTwoList.Add(new AnotherDestObject { Number = item.Number, Value = item.Value2 });
}
});
如果setter必须是private
,则必须将新的构造方法添加到类中并使用ConstructUsing()
。
添加此构造函数:
public DestObject(List<AnotherSourceObject>() sourceList)
{
ValueOneList = sourceList.Select(x => new AnotherDestObject { Number = item.Number, Value = item.Value1 }).ToList();
ValueTwoList = sourceList.Select(x => new AnotherDestObject { Number = item.Number, Value = item.Value2 }).ToList();
}
接着:
Mapper.CreateMap<Source, DestObject>()
.ConstructUsing(src => new DestObject(src.SourceList));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.