来自LINQ join的 Mapperly会忽略后续的对象属性映射
我在用Mapperly将一个DTO映射时遇到了困难,它的源对象来自两个对象的JOIN。
public class A
{
public int Id { get; set; }
public string AA { get; set; }
}
public class B
{
public int AId { get; set; }
public string BB { get; set; }
}
public class TheDTO
{
public string AA { get; set; }
public string BB { get; set; }
}
[Mapper]
public partial class TheDtoMapper
{
public partial TheDTO Map(A a, B b);
}
然后我按如下方式调用映射:
List<A> AA = new List<A>
{
new A { Id = 1, AA = "alpha" },
new A { Id = 2, AA = "beta" }
};
List<B> BB = new List<B>
{
new B { AId = 1, BB = "gamma" },
new B { AId = 2, BB = "delta" }
};
var mapper = new TheDtoMapper();
var result = AA
.Join(BB, (a) => a.Id, (b) => b.AId, (a, b) => new { a, b })
.Select(x => mapper.Map(x.a, x.b))
.ToList();
结果DTO的第一个对象(A)映射正确,但它忽略了 BB。
我正在使用.NET 8和 Mapperly 4.3.1。
解决方案
你的当前场景如同在这个 Mapperly的 GitHub问题 中所建议的那样,但遗憾的是此功能尚未有更新。
不过,你可以通过 合并对象 来实现你自己的映射逻辑,以便与多个来源进行合并。
你的 TheDtoMapper 类应如下:
[Mapper]
public partial class TheDtoMapper
{
public partial TheDTO MapAToDto(A a);
public partial void MergeBToDto(B b, TheDTO dto);
public TheDTO Map(A a, B b)
{
var dto = MapAToDto(a);
MergeBToDto(b, dto);
return dto;
}
}
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。