У меня есть источник перечисление, которое содержит внутреннее перечисление, 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);
Я пробовал много разных вариантов кода выше, и я не могу понять, где я ошибаюсь. Мне либо предлагается, что я не могу сопоставить «родительский уровень» или что сопоставление не существует.
Если бы я отображение вручную, я бы по существу хочу сделать следующее, однако, авто картограф жалуется эта конструкция является недействительной:
var destination = source.InnerCollection.Select(s => new DestinationClass { Name = s.Name }
Точной ошибка, я получаю,
Дополнительных информация: Пользовательская конфигурация для членов только поддерживается для отдельных членов верхнего уровня по типу.
Да, это в значительной степени то, что я сделал. Фокус делал SelectMany во внутренней коллекции до вызова mapper. –
Еще одним неясным способом использования SelectMany является sourceCollection.SelectMany (sm => sm.InnerColletion, (ic, s) => Mapper.Map (s)), где 'ic' представляет каждую внутреннюю коллекцию. Он в основном сглаживает SelectMany и Select в один оператор. Обычно для ясности я предпочитаю версию, которую я изначально написал, потому что мне не нужен доступ к коллекции для каждого объекта. –
BlackjacketMack