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.List
1[Web.ViewModels.ApplicationDriverAccidentFormVM]' to type 'System.Collections.Generic.List
1 [System.Object]".
Почему и как это сделать?
2 ответа
Я решил это следующим образом:
CreateMap<ViewModels.ApplicationDriverFormVM, ApplicationDriverDomain>().ForMember(dest => dest.Accidents, opt => opt.MapFrom(src => src.Accidents.Where(o => !Utils.IsAllNull(o))))
Ваш метод GetNotNullFromCollection
получает объект, но вы передаете ему список. В любом случае, я бы рекомендовал использовать Generics вместо объектов.