我有以下代码。
所有字段都很好地从源对象映射到目标对象。
但是,我需要计算目标对象中的一个字段。
例如:
DestinationObj.Status可以根据SourceObj.
如果我要编写代码,它看起来类似于:
foreach (var rec in listData)
{
string status;
if (!String.IsNullOrEmpty(rec.Field1))
{
status = "Stage 1";
}
if (!String.IsNullOrEmpty(rec.Field2))
{
status = "Stage 2";
}
if (!String.IsNullOrEmpty(rec.Field3))
{
status = "Stage 3";
}
}
Run Code Online (Sandbox Code Playgroud)
我可以在 AutoMapper 中做类似的事情吗?
var config = new MapperConfiguration(c =>
{
c.CreateMap<SourceObj, DestinationObj>()
.ForMember(x => x.Status, m => m.MapFrom([Not sure at this point]));
});
Run Code Online (Sandbox Code Playgroud)
编辑:
List<destinationObj> destinObj = new List<destinationObj>();
foreach (var rec in listSourceObject)
{
destinationObj do = new destinationObj();
// Manually map all of the fields...
string status;
if (!String.IsNullOrEmpty(rec.Field1))
{
do.status = "Stage 1";
}
if (!String.IsNullOrEmpty(rec.Field2))
{
do.status = "Stage 2";
}
if (!String.IsNullOrEmpty(rec.Field3))
{
do.status = "Stage 3";
}
destinObj.Add(do);
}
Run Code Online (Sandbox Code Playgroud)
最简单的方法是将方法移到映射器类中。然后您可以在您的.MapFrom().
var config = new MapperConfiguration(c =>
{
c.CreateMap<SourceObj, DestinationObj>()
.ForMember(dest => dest.Status, opt => opt.MapFrom(src => MapStatus(src)));
});
private string MapStatus(SourceObject source)
{
// Whatever that foreach loop actually does.
}
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请参阅自定义值解析器
| 归档时间: |
|
| 查看次数: |
6476 次 |
| 最近记录: |