Automapper - 从映射集合中排除一些对象
Automapper - exclude some objects from mapped collection
我有以下地图规则:
CreateMap<ViewModels.ApplicationDriverAccidentFormVM, ApplicationDriverAccidentDomain>();
然后我想将 ViewModels.ApplicationDriverFormVM 映射到 ApplicationDriverDomain,两者都有事故 属性,它们是每种类型的适当集合。
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;
}
但它说我:
Unable to cast object of type
'System.Collections.Generic.List1[Web.ViewModels.ApplicationDriverAccidentFormVM]'
to type 'System.Collections.Generic.List
1[System.Object]'.
为什么以及如何做?
您的方法 GetNotNullFromCollection
接收到一个对象,但您向它传递的是一个列表。
无论如何,我建议使用 Generics 而不是对象。
我是通过以下方式解决的:
CreateMap<ViewModels.ApplicationDriverFormVM, ApplicationDriverDomain>().ForMember(dest => dest.Accidents, opt => opt.MapFrom(src => src.Accidents.Where(o => !Utils.IsAllNull(o))))
我有以下地图规则:
CreateMap<ViewModels.ApplicationDriverAccidentFormVM, ApplicationDriverAccidentDomain>();
然后我想将 ViewModels.ApplicationDriverFormVM 映射到 ApplicationDriverDomain,两者都有事故 属性,它们是每种类型的适当集合。
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;
}
但它说我:
Unable to cast object of type 'System.Collections.Generic.List
1[Web.ViewModels.ApplicationDriverAccidentFormVM]' to type 'System.Collections.Generic.List
1[System.Object]'.
为什么以及如何做?
您的方法 GetNotNullFromCollection
接收到一个对象,但您向它传递的是一个列表。
无论如何,我建议使用 Generics 而不是对象。
我是通过以下方式解决的:
CreateMap<ViewModels.ApplicationDriverFormVM, ApplicationDriverDomain>().ForMember(dest => dest.Accidents, opt => opt.MapFrom(src => src.Accidents.Where(o => !Utils.IsAllNull(o))))