C # Автоматическое сопоставление свойств с массивом

У меня есть списки двух отдельных моделей, которые мне нужно объединить в родительскую модель, которая также является списком. Например:

Дочерняя модель 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
} , ...]

Как я могу одновременно сопоставить мои Sweet и Spicy модели с родительской FoodItem моделью?


person Edon    schedule 26.03.2019    source источник
comment
Mapper.Map имеет перегрузку для обновления существующего объекта. Здесь это может сработать для вас. Проверьте это   -  person JSteward    schedule 27.03.2019


Ответы (1)


Вы можете попробовать что-то вроде:

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();

Надеюсь, поможет!

person dcg    schedule 26.03.2019