【问题标题】:Can I use AutoMapper to Map one int to a list of objects?我可以使用 AutoMapper 将一个 int 映射到对象列表吗?
【发布时间】:2020-08-09 20:54:40
【问题描述】:
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; }

我有一个人的集合:

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

但是当一个对象和一个集合对一个集合时,我不知道如何做到这一点。

【问题讨论】:

  • 您能否提供一个完整的示例,包括输入以及映射后您期望的输出?很难说PersonPlanet 是如何相互关联的。如果PersonView 是相关的
  • @devNull 我添加了示例输入和输出。
  • 这是什么意思? “我想用 IEnumerable 上的 People Collection 映射 Planet,这可能吗?”。你想在行星类型上拥有一个属性People 吗?或者你想要一本来自 Planet-To-People 的字典吗?
  • @Waescher 我想将 PersonView(目标)类型映射到 People 和 Planet 这两种源类型。

标签: c# entity-framework automapper


【解决方案1】:

您可能需要进行多次映射才能使用您当前的类结构。您可以先将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));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-16
    • 1970-01-01
    • 2021-04-28
    • 1970-01-01
    • 1970-01-01
    • 2011-01-05
    相关资源
    最近更新 更多