You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Linq Join后Mapperly未映射第二个对象属性的问题

解决Mapperly多参数映射时B对象属性未映射的问题

问题原因

Mapperly 默认不会自动将多参数映射方法中所有参数的属性匹配到目标DTO,它默认优先处理第一个参数的属性,因此B对象的BB属性没有被自动映射到TheDTO中。

解决方案

方案1:手动实现映射逻辑

利用Mapperly支持部分方法的特性,手动补全映射逻辑:

[Mapper]
public partial class TheDtoMapper
{
    public partial TheDTO Map(A a, B b);

    private TheDTO MapImpl(A a, B b)
    {
        return new TheDTO
        {
            AA = a.AA,
            BB = b.BB
        };
    }
}

方案2:使用[MapProperty]显式指定映射关系

通过特性明确指定目标DTO属性对应的来源参数及属性:

[Mapper]
public partial class TheDtoMapper
{
    [MapProperty(nameof(TheDTO.AA), nameof(A.AA))]
    [MapProperty(nameof(TheDTO.BB), nameof(B.BB))]
    public partial TheDTO Map(A a, B b);
}

方案3:合并参数为单一对象后映射

在Join阶段将A、B的属性合并为匿名对象,再映射到DTO,简化映射方法:

// 更新映射器
[Mapper]
public partial class TheDtoMapper
{
    public partial TheDTO Map((string AA, string BB) source);
}

// 调用代码调整
var result = AA
    .Join(BB, a => a.Id, b => b.AId, (a, b) => (a.AA, b.BB))
    .Select(x => mapper.Map(x))
    .ToList();

以上三种方案在.NET 8 + Mapperly 4.3.1版本下均可正常工作,可根据实际场景选择合适的方式。

内容的提问来源于stack exchange,提问作者danielc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.04 11:12:01