C#自动映射属性到数组

时间:2019-03-26 21:55:22

标签: c# automapper

我有两个单独的模型的列表,我需要将它们合并到一个同样是列表的父模型中。例如:

子模型1

public class Sweet 
{
  public int SweetLevel {get; set;}
  public bool IsSweet {get; set;}
}

子模型2

public class Spicy
{
  public int IsSpicy {get; set;}
  public bool SpiceLevel {get; set;}
}
我正在尝试将1&2子模型合并到

父模型

public class FoodItem 
{
  public int SweetLevel {get; set;}
  public bool IsSweet {get; set;}
  public bool IsSpicy {get; set;}
  public int SpiceLevel {get; set;}
}

这是我尝试将辛辣食品列表和甜食品列表映射到父FoodItem的方法。

List<Sweet> listOfSweetItems = GetListOfSweetItems();
List<Spicy> listOfSpicyItems = GetListOfSpicyItems();

// Map the Sweet items
var mappedSweetItems = Mapper.Map<List<FoodItem>>(listOfSweetItems); // this maps correctly
// Map the Spicy items
var mappedSpicyItems = Mapper.Map<List<FoodItem>>(listOfSpicyItems); // this maps correctly

这些都是独立工作的,但是我想同时将它们映射到同一个FoodItem对象中,这样一轮迭代后看起来就像:

[{
 SweetLevel: 5,
 IsSweet: true,
 SpicyLevel: 1,
 IsSpicy: false
} , ...]

如何将我的SweetSpicy模型同时映射到父FoodItem模型中?

1 个答案:

答案 0 :(得分:2)

您可以尝试以下方法:

Mapper.Initialize(config =>
{
     config.CreateMap<Sweet, FoodItem>()
        .ForMember(f => f.IsSpicy, o => o.Ignore())
        .ForMember(f => f.SpiceLevel, o => o.Ignore());
     config.CreateMap<Spicy, FoodItem>()
        .ForMember(f => f.IsSweet, o => o.Ignore())
        .ForMember(f => f.SweetLevel, o => o.Ignore());
});
// ...
var foodItems = Mapper.Map<List<FoodItem>>(listOfSweetItems);
foodItems = foodItems
   .Zip(listOfSpicyItems, (foodItem, spicyItem) => Mapper.Map(spicyItem, foodItem))
   .ToList();

希望有帮助!