C# 使用Automapper将多个列表转换为单个主子对象列表
我有2个对象需要使用automapper转换为Dto对象。 这两个对象是C# 使用Automapper将多个列表转换为单个主子对象列表,c#,automapper,C#,Automapper,我有2个对象需要使用automapper转换为Dto对象。 这两个对象是 public class Parent { public int ParentID { get; set;} public string ParentCode { get; set; } } public class Child { public int ChildID { get; set; } public int
public class Parent
{
public int ParentID { get; set;}
public string ParentCode { get; set; }
}
public class Child
{
public int ChildID { get; set; }
public int ParentID { get; set;}
public string ChildCode { get; set; }
}
和2个Dto对象
public class ParentDto
{
public int ParentID { get; set; }
public string ParentCode { get; set; }
public List<ChildDTO> ListChild { get; set; }
}
public class ChildDto
{
public int ChildID { get; set; }
public string ChildCode { get; set; }
}
公共类ParentDto
{
public int ParentID{get;set;}
公共字符串父代码{get;set;}
公共列表ListChild{get;set;}
}
公营儿童
{
public int ChildID{get;set;}
公共字符串ChildCode{get;set;}
}
需要转换2套列表
List<Parent> ListParent
List<Child> ListChild
列出ListParent
列表列表子项
到
列出ListParentDto
因为您有多个源,所以我的解决方案是这样一种方法
public static List<ParentDto> MapToDto(List<Parent> parents, List<Child> childs)
{
List<ParentDto> parentDtos = new List<ParentDto>();
var config = new MapperConfiguration(cfg => {
cfg.CreateMap<Parent, ParentDto>().BeforeMap((s, d) =>
{
d.ListChild = new List<ChildDto>();
foreach (var child in childs.Where(c => c.ParentID == s.ParentID))
{
d.ListChild.Add(new ChildDto { ChildCode = child.ChildCode, ChildID = child.ChildID });
}
}).ForMember(dest => dest.ParentID, opt => opt.MapFrom(src => src.ParentID)).ForMember(dest => dest.ParentCode, opt => opt.MapFrom(src => src.ParentCode));
});
IMapper mapper = config.CreateMapper();
foreach (var p in parents)
{
var source = p;
var destination = mapper.Map<Parent, ParentDto>(source);
parentDtos.Add(destination);
}
return parentDtos;
}
公共静态列表映射到(列出父对象,列出子对象)
{
List parentDtos=新列表();
var config=new-MapperConfiguration(cfg=>{
cfg.CreateMap().BeforeMap((s,d)=>
{
d、 ListChild=新列表();
foreach(childs.Where中的var child(c=>c.ParentID==s.ParentID))
{
d、 Add(new ChildDto{ChildCode=child.ChildCode,ChildID=child.ChildID});
}
}).FormMember(dest=>dest.ParentID,opt=>opt.MapFrom(src=>src.ParentID)).FormMember(dest=>dest.ParentCode,opt=>opt.MapFrom(src=>src.ParentCode));
});
IMapper mapper=config.CreateMapper();
foreach(父项中的var p)
{
var源=p;
var destination=mapper.Map(源);
parentDtos.Add(目的地);
}
返回parentDtos;
}
不理解以下代码->foreach(childs.Where中的var child(c=>c.ParentID==s.ParentID))->什么是childs???它可以工作。。但是我有很多父母和孩子的Dto。。。你能帮我一个通用的方法吗?提前谢谢兄弟。太好了:)请帮我把我的答案标记为有用的。你有没有更多的课程是这样的?你想要一个通用的方法来接收两个列表,就像我发布的一样,并返回一个结果?一个解决方案是,做两个接口,iPart和IChild,在该方法中,输入参数将是List和List,您可以使用不同的类,但由于它们都实现了具有基参数的相同接口,因此该方法变得通用。
public static List<ParentDto> MapToDto(List<Parent> parents, List<Child> childs)
{
List<ParentDto> parentDtos = new List<ParentDto>();
var config = new MapperConfiguration(cfg => {
cfg.CreateMap<Parent, ParentDto>().BeforeMap((s, d) =>
{
d.ListChild = new List<ChildDto>();
foreach (var child in childs.Where(c => c.ParentID == s.ParentID))
{
d.ListChild.Add(new ChildDto { ChildCode = child.ChildCode, ChildID = child.ChildID });
}
}).ForMember(dest => dest.ParentID, opt => opt.MapFrom(src => src.ParentID)).ForMember(dest => dest.ParentCode, opt => opt.MapFrom(src => src.ParentCode));
});
IMapper mapper = config.CreateMapper();
foreach (var p in parents)
{
var source = p;
var destination = mapper.Map<Parent, ParentDto>(source);
parentDtos.Add(destination);
}
return parentDtos;
}