繁体   English   中英

Linq 使用自动映射器将 null 设置为一个值

[英]Linq set null to a value with automapper

我有一张包含消息的票。 此外,工单 model 包含一个 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是一个可以为空的类型,你可以尝试这样的事情:

.ForMember(dest => dest.ResolutionMessage, opt => opt.MapFrom(src => src.ResolutionMessageID.HasValue ? src.Messages.Where(m => m.MessageID == src.ResolutionMessageID) : null));

如果它不是可空类型并允许 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() ,无法同时使用两者。 我认为当您的条件 map 不接受规则时,最好保留 null 值。 如果使用, opt.Ignore()将忽略对象转换时的属性。

尝试在 AutoMapper 中使用AfterMap MappingExpression,然后检查null值。

  • AfterMap(Action<TSource, TDestination> afterFunction);

例子:

 // Execute a custom function to the source and/or destination types after member mapping

CreateMap<Resource, SubjectResource>()
.AfterMap((src, dest) =>
              {
                if (src.Subject.English == null)
                {
                  dest.Subject.English = Enumerable.Empty<SubjectResourceList>();
                }
              });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM