C# 使用子集合项自动映射展开
我正在使用Automapper进行以下源到目标的映射。源对象中有一个子集合,我想使用该项的第一项进行映射 下面是源和目标类:C# 使用子集合项自动映射展开,c#,.net,asp.net-core,asp.net-web-api,automapper,C#,.net,Asp.net Core,Asp.net Web Api,Automapper,我正在使用Automapper进行以下源到目标的映射。源对象中有一个子集合,我想使用该项的第一项进行映射 下面是源和目标类: class Source { public string Name { get; set; } public List<InnerSource> InnerSources { get; set; } } class InnerSource { public string InnerName { get; set; } publ
class Source
{
public string Name { get; set; }
public List<InnerSource> InnerSources { get; set; }
}
class InnerSource
{
public string InnerName { get; set; }
public string InnerDesciption { get; set; }
}
class Destination
{
public string Name { get; set; }
public string InnerName { get; set; }
public string InnerDesciption { get; set; }
}
cfg.CreateMap<Source, Destination>().IncludeMembers(s => s.InnerSources);
cfg.CreateMap<List<InnerSource>, Destination>()
.ForMember(d => d.InnerName, o => o.MapFrom(s => s.FirstOrDefault().InnerName))
.ForMember(d => d.InnerDesciption, o => o.MapFrom(s => s.FirstOrDefault().InnerDesciption));
类源代码
{
公共字符串名称{get;set;}
公共列表内部源{get;set;}
}
类内部源
{
公共字符串InnerName{get;set;}
公共字符串内部描述{get;set;}
}
班级目的地
{
公共字符串名称{get;set;}
公共字符串InnerName{get;set;}
公共字符串内部描述{get;set;}
}
映射器配置:
class Source
{
public string Name { get; set; }
public List<InnerSource> InnerSources { get; set; }
}
class InnerSource
{
public string InnerName { get; set; }
public string InnerDesciption { get; set; }
}
class Destination
{
public string Name { get; set; }
public string InnerName { get; set; }
public string InnerDesciption { get; set; }
}
cfg.CreateMap<Source, Destination>().IncludeMembers(s => s.InnerSources);
cfg.CreateMap<List<InnerSource>, Destination>()
.ForMember(d => d.InnerName, o => o.MapFrom(s => s.FirstOrDefault().InnerName))
.ForMember(d => d.InnerDesciption, o => o.MapFrom(s => s.FirstOrDefault().InnerDesciption));
cfg.CreateMap().IncludeMembers(s=>s.InnerSources);
cfg.CreateMap()
.ForMember(d=>d.InnerName,o=>o.MapFrom(s=>s.FirstOrDefault().InnerName))
.ForMember(d=>d.innerdescription,o=>o.MapFrom(s=>s.FirstOrDefault().innerdescription));
当我尝试使用上面的配置进行映射时,它工作得非常好
var source = new Source {
Name = "name",
InnerSources = new List<InnerSource> {
new InnerSource { InnerName = "John", InnerDesciption = "person"}
}
};
var destination = Mapper.Map<Destination>(source);
var source=新源{
Name=“Name”,
InnerSources=新列表{
新的InnerSource{InnerName=“John”,innerDescription=“person”}
}
};
var destination=Mapper.Map(源);
但缺点是,我必须单独映射源子集合中的所有属性
有没有更好的方法来解决上述问题?您可以在源代码上添加属性(对于
FirstOrDefault
)并使用IncludeMembers
。您可以在源代码上添加属性(对于FirstOrDefault
)并使用IncludeMembers
。