首页 > 解决方案 > 在 Automapper 映射中使用 Discard 变量

问题描述

我需要使用 Automapper 映射安全地将逗号分隔的字符串变量转换为 int 列表。

在 Automapper 的 6.2.2 版本中,我是这样做的:

cfg.CreateMap<FilterRequest, Filter>()
.ForMember(dest => dest.SomeIds, opt => opt.ResolveUsing(src => !string.IsNullOrEmpty(src.SomeIds) ? src.SomeIds.Split(',').Where(x => int.TryParse(x, out _)).Select(int.Parse).ToList() : null));

但在将 Automapper 升级到 8.1.1 版后,该ResolveUsing方法与方法合并MapFrom。当我尝试使用以下方法替换我的映射时MapFrom

cfg.CreateMap<FilterRequest, Filter>()
.ForMember(dest => dest.SomeIds, opt => opt.MapFrom(src => !string.IsNullOrEmpty(src.SomeIds) ? src.SomeIds.Split(',').Where(x => int.TryParse(x, out _)).Select(int.Parse).ToList() : null))

我在丢弃变量时遇到错误TryParse表达式树可能不包含丢弃

如何在 Automapper 映射中使用丢弃变量?

标签: c#automapper

解决方案


您可以使用此重载:

void MapFrom<TResult>(Func<TSource, TDestination, TResult> mappingFunction);

cfg.CreateMap<FilterRequest, Filter>()
    .ForMember(
        dest => dest.SomeIds,
        opt => opt.MapFrom((src, dest) => src.SomeIds
            .Split(',')
            .Where(x => int.TryParse(x, out _))
            .Select(int.Parse)
            .ToList()));

推荐阅读