展平对象内部集合并将其映射到另一个集合

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));