2013-10-03 2 views
1

У меня есть этот класс конвертера.Картирование AutoMapper для этого конкретного сценария

public class StatsConverter : TypeConverter<Tuple<Player,Stats>, StatsModel> 
             , ITypeConverter<Stats, StatsModel> 
{ 
    protected override StatsModel ConvertCore(Tuple<Player, Stats> source) 
    { 

     var pm = new StatsModel 
      { 
       Id = source.Item2.Id, 
       PlayerId = source.Item1.Id, 
       DisplayName = source.Item2.DisplayName, 

      }; 
     return pm; 
    } 
} 

Как возвращать IEnumerable<StatsModel> в следующем сценарии, где у меня есть List ---- player.PlayerStats, который должен быть отображен?

[HttpGet("{id:int}/PlayerStats", RouteName = "GetPlayerStats")] 
public IEnumerable<StatsModel> GetPlayerStats(int id) 
{ 
    var user = this._manager.GetPlayerById(id); 

    // I can retrieve a "List" of player.PlayerStats. 
    //But how do I map and return it? 
    return this._mapper.Map<IEnumerable<StatsModel>>(????) 
} 

Когда я делаю это

return this._mapper.Map<IEnumerable<StatsModel>>(player.PlayerStats); 

Я получаю эту ошибку: Change the type converter source type, or redirect the source value supplied to the value resolver using FromMember.

+1

Что такое подпись метода '_manager.GetPlayerById'? – Romoku

+0

Player GetPlayerById (int id); – GilliVilla

+1

Вам нужен «Tuple », как вы указали. – Romoku

ответ

0
public class StatsConverter : ITypeConverter<Tuple<Player, Stats>, StatsModel> 
{ 
    public StatsModel Convert(Tuple<Player, Stats> source) 
    { 
     return new StatsModel 
       { 
        Id = source.Item2.Id, 
        PlayerId = source.Item1.Id, 
        DisplayName = source.Item2.DisplayName, 
       }; 
    } 
} 

Сначала убедитесь, что ваш конвертер указан.

Mapper.CreateMap<Tuple<Player,Stats>, StatsModel> 
     .ConvertUsing<StatsConverter>(); 

Я буду считать, из вашего вопроса, что Player класса структурирован (поправьте меня, если я ошибаюсь):

public class Player 
{ 
    public int Id { get; set; } 
    public IEnumerable<Stats> PlayerStats { get; set; } 
} 

Внутри вашего метода вам нужно будет получить плеер и статистика группируется вместе.

var user = _manager.GetPlayerById(id); 

// Expand the player stats 
var playerStats = user.PlayerStats 
         .Select(stats => Tuple.Create(user, stats)); 

Mapper.Map<IEnumerable<Tuple<Player,Stats>>, 
      IEnumerable<StatsModel>>(playerStats); 
Смежные вопросы