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

标签 c# linq automapper

我有一张包含消息的工单。此外,工单模型包含一个 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/

相关文章:

c# - 在测试项目中使用 .Net Core 依赖注入(inject)

c# - 如何在 asp.net mvc 中使用 Linq 删除表后重置 id

collections - AutoMapper 和接口(interface)类型的集合

c# - 使用映射库将嵌套对象映射到 C# 中的自定义对象

c# - 具有基类和不同实现配置选项的自动映射器

c# - 具有多个值的 ArrayList c#

c# - NetworkComms 自定义对象错误 - "objectToSerialize must implement IExplicitlySerialize"

c# - 动态构建 webapi odata 模型

c# - 查找第一个大写字符的索引

c# - 嵌套类列表 LINQ