我有一张包含消息的工单。此外,工单模型包含一个 resolutionMessage,它是一条可以为 null 的消息。
我想做这样的事情:
Mapper.CreateMap<Ticket, TicketModel>()
.ForMember(dest => dest.ResolutionMessage, opt => opt.MapFrom(src =>
{
if (src.ResolutionMessageID != null)
{
src.Messages.Where(m => m.MessageID == src.ResolutionMessageID);
}
else
// Return null;
}
));
第二次尝试:
.ForMember(dest => dest.ResolutionMessage, opt =>
{
(opt.MapFrom(src => if(src.ResolutionMessageID != null)
opt.MapFrom(src => src.Messages.Where(m => m.MessageID == src.ResolutionMessageID));
else
opt => opt.Ignore();
}
);
有什么想法吗?
最佳答案
我会考虑 ResolutionMessageID
是一个可以为 null 的类型,你可以尝试这样的事情:
.ForMember(dest => dest.ResolutionMessage, opt => opt.MapFrom(src => src.ResolutionMessageID.HasValue ? src.Messages.Where(m => m.MessageID == src.ResolutionMessageID) : null));
如果它不是可空类型并允许为空:
.ForMember(dest => dest.ResolutionMessage, opt => opt.MapFrom(src => src.ResolutionMessageID != null ? src.Messages.Where(m => m.MessageID == src.ResolutionMessageID.Value) : null));
或者您使用 opt.MapFrom()
或 opt.Ignore()
,无法同时使用两者。我认为当您映射的条件不接受规则时,最好保留空值。如果使用,opt.Ignore()
将忽略对象转换时的属性。
关于c# - Linq 使用自动映射器将 null 设置为一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18154376/