自动映射 - 从映射集合中排除某些对象

时间:2017-09-30 08:25:43

标签: c# collections mapping automapper automapper-6

我有以下地图规则:

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

但它告诉我:

  

无法投射类型的对象   &#39; {System.Collections.Generic.List {1}} 1 [System.Object的]&#39;

为什么以及如何做?

2 个答案:

答案 0 :(得分:0)

你的方法GetNotNullFromCollection收到一个对象,但你传递的是一个列表。 无论如何,我建议使用Generics而不是对象。

答案 1 :(得分:0)

我通过以下方式解决了它:

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