我可以使用 AutoMapper 将一个 int 映射到 objects 的列表吗?

Can I use AutoMapper to Map one int to a list of objects?

public class Person {
        public string Name { get; set; }
        public int Age { get; set; }
}

public class Planet {
        public int Id { get; set; }
        public string Name { get; set; }
}

public class PersonView {
        public string Name { get; set; }
        public int Age { get; set; }
        public int PlanetId { get; set; }

我有 Collection 人:

IEnumerable<Person> people = new IEnumerable<Person>();

还有一颗行星:

Planet ours = new Planet(){
  Id=1,
  Name="Earth"
}

输入为:

[
  {
  "Name": "George",
  "Age": 21
  },
  {
  "Name": "Lisa",
  "Age": 24
  },
  {
  "Name": "George",
  "Age": 18
  }
]

{
  "Id":1,
  "Name":"Earth"
}

映射如下:

IEnumerable<PersonView> people =
                mapper.Map<Person, PersonView>(people)
                      .Map<Planet, PersonView>(people);
            

输出为:

[
  {
  "Name": "George",
  "Age": 21,
  "PlanetId": 1
  },
  {
  "Name": "Lisa",
  "Age": 24,
  "PlanetId": 1
  },
  {
  "Name": "George",
  "Age": 18,
  "PlanetId": 1
  }
]

我想将 PersonView(目标)类型映射到 People 和 Planet 这两个源类型,这可能吗?

我知道如何将两个来源映射到一个目的地 --> Automapper - Multi object source and one destination

但是我不知道当有一个 object 和一个 Collection 对一个 Collection 时我该如何做到这一点。

您可能必须进行多次映射才能使其与您当前的 class 结构一起使用。您可以先将 people 映射到 PersonView 的集合。然后将 Planet 映射到每个 PersonView 结果中。例如:

IEnumerable<Person> persons = ...
Planet planet = ...
IEnumerable<PersonView> personViews = 
    mapper.Map<IEnumerable<PersonView>>(persons)
        .Select(v => mapper.Map<Planet, PersonView>(planet, v));