gpt4 book ai didi

c# - AutoMapper - 一对多映射

转载 作者:太空狗 更新时间:2023-10-30 01:31:45 26 4
gpt4 key购买 nike

我在将带有嵌套列表的一个源对象映射到多个目标对象时遇到问题。由于项目限制,我只能修改部分代码。我正在使用 AutoMapper 5.1。

/// no changes possible
namespace Source
{
class Person
{
public string Name { get; set; }
public List<Car> Cars { get; set; }

public Person()
{
Cars = new List<Car>();
}
}

class Car
{
public string NumberPlate { get; set; }
}
}

/// no changes possible
namespace Destination
{
class PersonCar
{
public string Name { get; set; }
public string NumberPlate { get; set; }
}
}

/// Demo Consolen Application
static void Main(string[] args)
{
#region init data
Person person = new Person();
for (int i = 0; i < 10; i++)
{
person.Cars.Add(new Source.Car() { NumberPlate = "W-100" + i });
}
#endregion

/// goal is to map from one person object o a list of PersonCars
Mapper.Initialize(
cfg => cfg.CreateMap<Person, List<PersonCar>>()
/// this part does not work - and currently I am stuck here
.ForMember(p =>
{
List<PersonCar> personCars = new List<PersonCar>();

foreach (Car car in p.Cars)
{
PersonCar personCar = new PersonCar();
personCar.Name = p.Name;
personCar.NumberPlate = car.NumberPlate;
personCars.Add(personCar);
}
return personCars;
})
);

// no changes possible
List<PersonCar> result = Mapper.Map<Person, List<PersonCar>>(person);
}

}

现在我一直在为这个问题定义一个合适的映射。虽然我在 workt 做了一个(丑陋的!!)映射(在那里留下代码 .. facepalm)我确信这个问题一定有一个简单的解决方案。

如有任何帮助,我们将不胜感激!

最佳答案

您可以使用 .ConstructProjectionUsing 方法,以提供您想要的实体的投影。

Mapper.Initialize(cfg => {
cfg.CreateMap<Person, List<PersonCar>>()
.ConstructProjectionUsing(
p =>
p.Cars.Select(c => new PersonCar { Name = p.Name, NumberPlate = c.NumberPlate })
.ToList()
);
});

关于c# - AutoMapper - 一对多映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39804746/

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