如何在automapper.net中从列表映射到平面对象



我有一个包含产品列表的复杂对象。


public class Container
{
public List<Product> Products;
}
public class Product
{
public string Name;
public string Colour;
}

public class NewClass
{
public string Name1;
public string Colour1;
public string Name2;
public string Colour2;
public string Name3;
public string Colour3;
}

我想将容器类映射到新类
我的产品永远不会超过3个,但当我用automapper映射它时,我会出现超出范围的异常,因为我不知道列表中会包含1、2还是3个产品。

cfg.CreateMap< Container, NewClass>()
.ForMember(d => d.Name1, 
opt => opt.MapFrom(src => src.Product[0].name)cfg.CreateMap< Container, NewClass().ForMember(d => d.Name2, 
opt => opt.MapFrom(src => src.Product[1].name)cfg.CreateMap< Container, NewClass>()
.ForMember(d => d.Name3, 
opt => opt.MapFrom(src => src.Product[2].name)
);

任何帮助,显然代码是一个例子,但本质上我必须从列表映射到平面对象

首先,对于同一源/目标对象,不需要多次调用CreateMap,只需链式调用ForMember即可。

您可以使用方法ElementAtOrDefault,而不是直接访问指定的索引,该方法将返回指定索引处的元素;如果索引超出范围,则返回null。

所以你可以这样做:

cfg.CreateMap<Container, NewClass>()
.ForMember(dest => dest.Name1, opt => opt.MapFrom(src => src.Products.ElementAtOrDefault(0).Name))
.ForMember(dest => dest.Name2, opt => opt.MapFrom(src => src.Products.ElementAtOrDefault(1).Name))
.ForMember(dest => dest.Name3, opt => opt.MapFrom(src => src.Products.ElementAtOrDefault(2).Name));

最新更新