Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将不相关的集合映射到一个_C#_Automapper - Fatal编程技术网

C# 将不相关的集合映射到一个

C# 将不相关的集合映射到一个,c#,automapper,C#,Automapper,我有一个类,有两个不同的不相关类型的集合 public class Entity { ICollection<Foo> Foos { get; set; } ICollection<Bar> Bars { get; set; } } 公共类实体 { ICollection Foos{get;set;} ICollection条{get;set;} } 我想使用AutoMapper将其映射到另一个具有一个集合的类 public class DTO {

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

public class Entity
{
    ICollection<Foo> Foos { get; set; }
    ICollection<Bar> Bars { get; set; }
}
公共类实体
{
ICollection Foos{get;set;}
ICollection条{get;set;}
}
我想使用AutoMapper将其映射到另一个具有一个集合的类

public class DTO {
    ICollection<FooBar>
}
公共类DTO{
I收集
}
我分别将这两种实体类型的映射配置为Dto类型

.CreateMap<Foo, FooBar>()
.CreateMap<Bar, FooBar>()
.CreateMap()
.CreateMap()文件
如何配置映射实体->Dto,以便将两个集合Foos和bar合并到Foobars中

如果我像这样单独配置它们

.CreateMap<Entity, Dto>()
    .ForMember(dest => dest.FooBars, opt => opt.MapFrom(src => src.Foos))
    .ForMember(dest => dest.FooBars, opt => opt.MapFrom(src => src.Bars))
.CreateMap()
.ForMember(dest=>dest.FooBars,opt=>opt.MapFrom(src=>src.Foos))
.FormMember(dest=>dest.FooBars,opt=>opt.MapFrom(src=>src.bar))
FooBars设置了两次,因此被第二个集合覆盖

这个问题展示了以不同的方式合并两个集合的方法,在进行实际映射时,它们都需要多个方法调用。我想配置它,这样我就可以通过简单地编写

AutoMapper.Mapper.Map<Entity, Dto>(entities);
AutoMapper.Mapper.Map(实体);
您需要的是:

公共类CustomResolver:IValueResolver
{
公共整数解析(实体)
,DTO-DTO
,ICollection fooBars
,ResolutionContext(上下文)
{
//在这里,您应该从实体Foos和bar进行转换
//收集并收集它们。
}
}
然后在设置AutoMapper时,您应该使用上述自定义解析器:

// other code
.CreateMap<Entity, Dto>()
.ForMember(dest => dest.FooBars, opt => opt.ResolveUsing<CustomResolver>());
//其他代码
.CreateMap()文件
.FormMember(dest=>dest.FooBars,opt=>opt.resolvesusing());

当您在这里说您应该从实体foo和bar转换时,您的意思是手动转换,还是有办法使用映射配置来映射对象?我不知道如何做AutoMapper.Mapper.Map(实体);从自定义解析程序中执行。@DaImTo我是指手动执行。我不知道,我们是否可以使用映射配置来映射对象。
// other code
.CreateMap<Entity, Dto>()
.ForMember(dest => dest.FooBars, opt => opt.ResolveUsing<CustomResolver>());