Задать вопрос

Проблема с Mapping?

Привет всем. Есть Апи который возвращает такие данные:
[
  {
    "id": 1,
    "telegramId": "user1",
    "accounts": [
      {
        "id": 1,
        "SteamId": "steamid1",
        "UserId": 1
      },
      {
        "id": 2,
        "SteamId": "steamid2",
        "UserId": 1
      }
    ]
  },
  {
    "id": 2,
    "telegramId": "user2",
    "accounts": [
      {
        "id": 3,
        "SteamId": "steamid3",
        "UserId": 2
      }
    ]
  },
  {
    "id": 3,
    "telegramId": "user3",
    "accounts": [
      {
        "id": 4,
        "SteamId": "steamid4",
        "UserId": 3
      },
      {
        "id": 5,
        "SteamId": "steamid5",
        "UserId": 3
      },
      {
        "id": 6,
        "SteamId": "steamid6",
        "UserId": 3
      }
    ]
  }
]


Вот их модель:
public class User
    {
        public User()
        {
            this.Accounts = new HashSet<Account>();
        }
        public int Id { get; set; }
        public string TelegramId { get; set; } = null!;
        public virtual ICollection<Account> Accounts { get; set; }
    }


public class Account
    {
        public int Id { get; set; }
        public string SteamId { get; set; } = null!;
        public User? User { get; set; }
        public int? UserId { get; set; }
    }


Вот DTO которую я буду показывать юзерам

public class ForUserDataDto
    {
        public string TelegramUserId { get; set; } = null!;
        public List<Steam> Steam { get; set; } = new();
    }

    public class Steam
    {
        public string SteamId { get; set; } = null!;
    }


Пытаюсь Смаппить следующим образом выходит ошибка

CreateMap<User, IList<ForUserDataDto>>()
                .ConvertUsing(s => s.Accounts.Select(tx => tx.SteamId.Select(t => new ForUserDataDto() { TelegramUserId = s.TelegramId, new Steam() { SteamId = tx.SteamId } })).Tolist());


Помогите пожалуйста как можно правильно смаппить чтобы так показывалось юзерам
[
  {
    "telegramId": "еее",
    "Steam": [
      {
        "Steamid": "test"
      },
      {
        "Steamid": "test2"
      }
    ]
  },
  {
    "telegramId": "eee2",
    "Steam": [
      {
        "Steamid": "test3"
      }
    ]
  }
]
  • Вопрос задан
  • 64 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
@oleg_ods
Если используешь AutoMapper:
CreateMap<User,ForUserDataDto>()
.ForMember(d => d.Steam, opt => opt.MapFrom(s => s.Accounts.Select(a => new Steam { SteamId = a. SteamId })));
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы