gpt4 book ai didi

c# - AutoMapper - 将 2 个对象列表合并为 1 个列表

转载 作者:行者123 更新时间:2023-11-30 23:25:14 26 4
gpt4 key购买 nike

我看过一些示例,您可以在其中使用 AutoMapper 将来自多个来源的数据组合到一个来源。

我的问题是,当我处理数据列表时,我如何才能做到这一点?

编辑:在我的示例中,List(Person) 将映射到 List(PersonCompany),但是 List(Company) 到 List(PersonCompany) 的映射不映射。

编辑 2:更改映射器以更新模型,但是公司映射现在是唯一被映射的数据。

假设我有以下类(class):

public class Person
{
public int ID { get; set; }
public string Name { get; set; }
public string PhNo { get; set; }
}
public class Company
{
public int PersonID { get; set; }
public int EmpNo { get; set; }
public string Title { get; set; }
}

public class PersonCompany
{
public string Name { get; set; }
public string PhNo { get; set; }

public int EmpNo { get; set; }
public string Title { get; set; }

public int ID { get; set; }
}

现在这个简单的例子可以工作了......

    // This is a simple example using AutoMapper to map 2 source objects into one destination object.
var personMapConfig = new MapperConfiguration(c =>
c.CreateMap<Person, PersonCompany>()
.ForMember(x => x.Name, y => y.MapFrom(a => a.Name))
.ForMember(x => x.PhNo, y => y.MapFrom(a => a.PhNo))
.ForMember(x => x.ID, y => y.MapFrom(a => a.ID))
);

var companyMapConfig = new MapperConfiguration(c =>
c.CreateMap<Company, PersonCompany>()
.ForMember(d => d.EmpNo, opt => opt.MapFrom(s => s.EmpNo))
.ForMember(d => d.Title, opt => opt.MapFrom(s => s.Title))
);

var person = new Person { ID=1, Name = "PersonName", PhNo = "212-000-0000" };
var company = new Company { PersonID = 1, Title = "Associate Director", EmpNo = 10001 };


var model = personMapConfig.CreateMapper().Map<Person, PersonCompany>(person);
companyMapConfig.CreateMapper().Map<Company, PersonCompany>(company, model);

但是,当我处理数据列表时,它不会。

    var personList = new List<Person> { new Person { ID=1, Name="David Johnson", PhNo="(111) 111-1111"},
new Person { ID=2, Name="Marvin Miller", PhNo="(222) 222-2222"},
new Person { ID=3, Name="Jack Wilson", PhNo="(333) 333-3333"}};

var companyList = new List<Company> { new Company { EmpNo= 1, PersonID = 1, Title="Director"},
new Company { EmpNo= 2, PersonID = 2, Title="Surgeon"},
new Company { EmpNo= 3, PersonID = 3, Title="Sales"}};

var personMapConfig = new MapperConfiguration(c =>
c.CreateMap<Person, PersonCompany>()
.ForMember(x => x.Name, y => y.MapFrom(a => a.Name))
.ForMember(x => x.PhNo, y => y.MapFrom(a => a.PhNo))
.ForMember(x => x.ID, y => y.MapFrom(a => a.ID))
);

var companyMapConfig = new MapperConfiguration(c =>
c.CreateMap<Company, PersonCompany>()
.ForMember(d => d.EmpNo, opt => opt.MapFrom(s => s.EmpNo))
.ForMember(d => d.Title, opt => opt.MapFrom(s => s.Title))
);

var model = personMapConfig.CreateMapper().Map<List<Person>, List<PersonCompany>>(personList);
companyMapConfig.CreateMapper().Map<List<Company>, List<PersonCompany>>(companyList, model);

最佳答案

最后两行调用 .Map<List<Person>, List<PersonCompany>().Map<List<Company>, List<PersonCompany>>() .这两个调用都会返回您期望的值。问题是您没有加入数据。您只告诉它如何转换 Person -> PersonCompanyCompany -> PersonCompany ,而不是如何将数据连接在一起。

我怀疑您是否需要为此使用 AutoMapper。以下作品:

var personList = new List<Person> { new Person { ID=1, Name="David Johnson", PhNo="(111) 111-1111"},
new Person { ID=2, Name="Marvin Miller", PhNo="(222) 222-2222"},
new Person { ID=3, Name="Jack Wilson", PhNo="(333) 333-3333"}};

var companyList = new List<Company> { new Company { EmpNo= 1, PersonID = 1, Title="Director"},
new Company { EmpNo= 2, PersonID = 2, Title="Surgeon"},
new Company { EmpNo= 3, PersonID = 3, Title="Sales"}};

var personCompanies = companyList.Join(personList, m => m.PersonID, m => m.ID, (c, p) => new PersonCompany {
Name = p.Name,
PhNo = p.PhNo,
EmpNo = c.EmpNo,
ID = p.ID,
Title = c.Title
});

关于c# - AutoMapper - 将 2 个对象列表合并为 1 个列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37415960/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com