gpt4 book ai didi

c# - 将不相关的集合映射为一个

转载 作者:行者123 更新时间:2023-11-30 23:06:53 26 4
gpt4 key购买 nike

我有一个类有两个不同的不相关类型的集合

public class Entity
{
ICollection<Foo> Foos { get; set; }
ICollection<Bar> Bars { get; set; }
}

我想使用 AutoMapper 将其映射到具有一个集合的另一个类

public class DTO {
ICollection<FooBar>
}

我将两种实体类型的映射分别配置为Dto类型。

.CreateMap<Foo, FooBar>()
.CreateMap<Bar, FooBar>()

如何配置映射 Entity -> Dto 以便将两个集合 Foos 和 Bars 合并到 Foobars 中?

如果我这样单独配置它们

.CreateMap<Entity, Dto>()
.ForMember(dest => dest.FooBars, opt => opt.MapFrom(src => src.Foos))
.ForMember(dest => dest.FooBars, opt => opt.MapFrom(src => src.Bars))

FooBars 设置了两次,因此被第二个集合覆盖。

问题Automapper - Multi object source and one destination显示以不同方式将两个集合合并为一个集合的方法,在进行实际映射时,所有这些方法都需要调用多个方法。我想配置它,这样我就可以通过简单地编写来进行映射

AutoMapper.Mapper.Map<Entity, Dto>(entities);

最佳答案

您需要的是 custom value resolver :

public class CustomResolver : IValueResolver<Source, Destination, int>
{
public int Resolve(Entity entity
, DTO dto
, ICollection<FooBar> fooBars
, ResolutionContext context)
{
// Here you should convert from entity Foos and Bars
// to ICollection<FooBar> and concat them.
}
}

然后在 AutoMapper 的设置中你应该使用上面的自定义解析器:

// other code
.CreateMap<Entity, Dto>()
.ForMember(dest => dest.FooBars, opt => opt.ResolveUsing<CustomResolver>());

关于c# - 将不相关的集合映射为一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47808827/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com