我需要使用Automapper的比较表达式将2个对象列表合并为1个对象,以获取列表1中对象的一些属性和列表2中对象的一些属性
我尝试使用Automapper.Collection(https://github.com/AutoMapper/AutoMapper.Collection)nuget,但是默认操作是:
但是我只想在有匹配项的情况下进行映射,否则,我想忽略记录
public class Class1
{
public string Id { get; set; }
public string Code { get; set; }
}
public class Class2
{
public string Id { get; set; }
public string Description { get; set; }
}
public class Class3
{
public string NewId { get; set; }
public string NewCode { get; set; }
public string NewDescription { get; set; }
}
var configuration = new MapperConfiguration(cfg =>
{
cfg.CreateMap<Class1, Class3>()
.ForMember(dest => dest.NewId, opt => opt.MapFrom(src => src.Id))
.ForMember(dest => dest.NewCode, opt => opt.MapFrom(src => src.Code))
;
cfg.CreateMap<Class2, Class3>()
.ForMember(dest => dest.NewDescription, opt => opt.MapFrom(src => src.Description))
;
});
var mapper = configuration.CreateMapper();
var class1List = new List<Class1>
{
new Class1 {Id = "1", Code = "code1"},
new Class1 { Id = "2", Code = "code2" },
new Class1 {Id = "3", Code = "code3"}
};
var class2List = new List<Class2>
{
new Class2 {Id = "2", Description = "desc2"}
};
var class3List = mapper.Map<List<Class3>>(class1List);
mapper.Map(class2List, class3List);
我希望最后的“ class3List”包含3个元素,标识为“ 2”的元素必须同时具有代码和描述。
答案 0 :(得分:1)
Automapper可能不是该任务的正确工具。 您可以使用简单的LINQ Join语句代替Automapper:
var class3List = class1List.Join(class2List, o => o.Id, i => i.Id, (o, i) => new Class3 { NewId = o.Id, NewCode = o.Code, NewDescription = i.Description }).ToList();