Automapper - 使用解析器在条件下进行映射
Posted
技术标签:
【中文标题】Automapper - 使用解析器在条件下进行映射【英文标题】:Automapper - Using Resolver to map under condition 【发布时间】:2021-12-08 05:56:19 【问题描述】:定义解析器如下:
public string Resolve(AppUser source, MemberDto destination, string destMember, ResolutionContext context)
if (source.Photos.Count > 0)
if (source.Photos.FirstOrDefault(x => x.IsMain) != null)
var urlStart = (source.Photos.FirstOrDefault(x => x.IsMain).Url.ToString()).Substring(0, 4);
if (urlStart == "http")
return source.Photos.FirstOrDefault(x => x.IsMain).Url;
else
return _config["ApiUrl"] + source.Photos.FirstOrDefault(x => x.IsMain).Url;
return null;
并将属性映射如下:
CreateMap<AppUser, MemberDto>()
.ForMember(d => d.Image, o => o.MapFrom<MemberAvatarResolver>())
并返回结果如下:
public async Task<PagedList<MemberDto>> GetMembersAsync(UserParams userParams)
var query = _context.Users
.Include(p => p.Photos)
.AsQueryable();
var mappedEntity = query.ProjectTo<MemberDto>(_mapper
.ConfigurationProvider, new Image = query.Select(u => u.Photos.FirstOrDefault(x => x.IsMain).Url));
return await PagedList<MemberDto>.CreateAsync(mappedEntity,
userParams.PageNumber, userParams.PageSize);
但我遇到了映射异常:
无法创建地图表达式
类型映射配置:AppUser -> MemberDto
目标成员:图片
我找到了this solution,但它使用匿名类型而不是 DTO/Resolver
对如何实现这个案例有任何帮助吗?
【问题讨论】:
docs.automapper.org/en/latest/… 【参考方案1】:我看到您正在使用:“ProjectTo”。这只适用于表达式。 你想要的是不支持。
请参阅以下文档:https://docs.automapper.org/en/latest/Queryable-Extensions.html#supported-mapping-options
支持的映射选项
并非所有映射选项都可以支持........
不支持:
MapFrom(基于 Func).......
【讨论】:
以上是关于Automapper - 使用解析器在条件下进行映射的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET Core 中的对象映射之 AutoMapper
Automapper.Mapper.CreateMap 无法解析