【问题标题】:Automapper - Using Resolver to map under conditionAutomapper - 使用解析器在条件下进行映射
【发布时间】: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

对如何实现这个案例有任何帮助吗?

【问题讨论】:

标签: c# linq .net-core entity-framework-core automapper


【解决方案1】:

我看到您正在使用:“ProjectTo”。这只适用于表达式。 你想要的是不支持

请参阅以下文档:https://docs.automapper.org/en/latest/Queryable-Extensions.html#supported-mapping-options

支持的映射选项

并非所有映射选项都可以支持........

不支持:

  • MapFrom(基于 Func)

.......

【讨论】:

    猜你喜欢
    • 2016-04-13
    • 2013-03-11
    • 1970-01-01
    • 1970-01-01
    • 2014-08-05
    • 1970-01-01
    • 1970-01-01
    • 2015-12-05
    相关资源
    最近更新 更多