展平对象内部集合并将其映射到另一个集合
Flatten and map objects inner collection to another collection
我有一个 source 枚举,它包含一个内部枚举,IEnumerable<>。 我希望能够将我的源放在内部枚举并将其展平到我的目标枚举中。然而,当我尝试下面的代码时,系统提示我有一个异常,指出这是一个无效的映射。
public class DestinationClass
{
string Name {get; set;}
}
public class SourceClass
{
IEnumerable<SourceInnerClass> InnerCollection {get; set;}
}
public class SourceInnerClass
{
string Name {get; set;}
}
// Mapping Configuration
Mapper.CreateMap<SourceInnerClass, DestinationClass>();
Mapper.CreateMap<SourceClass, IEnumerable<DestinationClass>>()
.ForMember(dest => dest,
opts => opts.MapFrom(source => source.InnerCollection));
// Implementation
IEnumeration<SourceClass> sourceCollection = GetSourceDataEnumeration();
var results = Mapper.Map<IEnumeration<DestinationClass>>(sourceCollection);
我已经尝试了上面代码的许多不同变体,但我似乎无法弄清楚哪里出错了。系统提示我无法在 "parent level" 映射或映射不存在。
如果我手动映射,我基本上想执行以下操作,但是,自动映射器抱怨此构造无效:
var destination = source.InnerCollection.Select(s => new DestinationClass { Name = s.Name }
我得到的确切错误是,
Additional information: Custom configuration for members is only
supported for top-level individual members on a type.
我的方法是将可枚举项保留在 CreateMap 定义之外...保留基于单个对象的类型。
Mapper.CreateMap<SourceInnerClass, DestinationClass>();
var results = sourceCollection.SelectMany(sm=>sm.InnerCollection).Select(s=>Mapper.Map<DestinationClass>(s));
我有一个 source 枚举,它包含一个内部枚举,IEnumerable<>。 我希望能够将我的源放在内部枚举并将其展平到我的目标枚举中。然而,当我尝试下面的代码时,系统提示我有一个异常,指出这是一个无效的映射。
public class DestinationClass
{
string Name {get; set;}
}
public class SourceClass
{
IEnumerable<SourceInnerClass> InnerCollection {get; set;}
}
public class SourceInnerClass
{
string Name {get; set;}
}
// Mapping Configuration
Mapper.CreateMap<SourceInnerClass, DestinationClass>();
Mapper.CreateMap<SourceClass, IEnumerable<DestinationClass>>()
.ForMember(dest => dest,
opts => opts.MapFrom(source => source.InnerCollection));
// Implementation
IEnumeration<SourceClass> sourceCollection = GetSourceDataEnumeration();
var results = Mapper.Map<IEnumeration<DestinationClass>>(sourceCollection);
我已经尝试了上面代码的许多不同变体,但我似乎无法弄清楚哪里出错了。系统提示我无法在 "parent level" 映射或映射不存在。
如果我手动映射,我基本上想执行以下操作,但是,自动映射器抱怨此构造无效:
var destination = source.InnerCollection.Select(s => new DestinationClass { Name = s.Name }
我得到的确切错误是,
Additional information: Custom configuration for members is only supported for top-level individual members on a type.
我的方法是将可枚举项保留在 CreateMap 定义之外...保留基于单个对象的类型。
Mapper.CreateMap<SourceInnerClass, DestinationClass>();
var results = sourceCollection.SelectMany(sm=>sm.InnerCollection).Select(s=>Mapper.Map<DestinationClass>(s));