Automapper - исключить некоторые объекты из сопоставленной коллекции

У меня есть следующие правила карты:

CreateMap<ViewModels.ApplicationDriverAccidentFormVM, ApplicationDriverAccidentDomain>();

затем я хочу сопоставить ViewModels.ApplicationDriverFormVM с ApplicationDriverDomain, оба имеют свойство Accidents, которые являются соответствующими коллекциями для каждого типа.

public class ApplicationDriverDomain
{
    public List<ApplicationDriverAccidentDomain> Accidents { get; set; }
}

public class ApplicationDriverFormVM
{
    public List<ApplicationDriverAccidentFormVM> Accidents { get; set; }
}

И я хочу исключить (не отображать) все записи, которые не удовлетворяют некоторым условиям, я пытаюсь написать следующий код:

        CreateMap<ViewModels.ApplicationDriverFormVM, ApplicationDriverDomain>()
            .ForMember(dest => dest.Accidents, opt => opt.MapFrom(src => GetNotNullFromCollection(src.Accidents)))

где GetNotNullFromCollection:

    List<object> GetNotNullFromCollection(object input)
    {
        List<object> output = new List<object>();
        foreach (var item in (List<object>)input)
        {
            if (!Utils.IsAllNull(item))
                output.Add(item);
        }
        return output;
    }

но это говорит мне:

Невозможно привести объект типа 'System.Collections.Generic.List1[Web.ViewModels.ApplicationDriverAccidentFormVM]' to type 'System.Collections.Generic.List1 [System.Object]".

Почему и как это сделать?

2 ответа

Решение

Я решил это следующим образом:

CreateMap<ViewModels.ApplicationDriverFormVM, ApplicationDriverDomain>().ForMember(dest => dest.Accidents, opt => opt.MapFrom(src => src.Accidents.Where(o => !Utils.IsAllNull(o))))

Ваш метод GetNotNullFromCollection получает объект, но вы передаете ему список. В любом случае, я бы рекомендовал использовать Generics вместо объектов.

Другие вопросы по тегам