У меня есть отношение ManyToMany между таблицами:
(Все сделано по рекомендациям)
public IEnumerable<User> GetAll()
{
return _context.Users
.Include(x => x.UserTags)
.ThenInclude(z => z.Tag);
}
Приложение очень глубокое
[
{
"id": 1,
"username": "Jon",
"password": null,
"userTags": [
{
"userId": 1,
"user": {
...
Я бы хотел получить:
[
{
"id": 1,
"username": "Bartek",
"password": null,
"userTags": [ // List of Tags ]
ИЗМЕНИТЬ
На данный момент я сделал, как показано ниже
[HttpGet]
public IActionResult GetAll()
{
var users = _userService.GetAll();
List<UserDto> result = new List<UserDto>();
foreach (var user in users)
{
var tagDto = _mapper.Map<IList<TagDto>>(user.UserTags.Select(x => x.Tag));
var userDtos = new UserDto
{
Id = user.Id,
Username = user.Username,
Tags = tagDto
};
result.Add(userDtos);
}
return Ok(result);
}
Но разве нет встроенной опции для получения желаемого эффекта?
Я построил свой собственный Mapper для этой ситуации:
public class MyMapper
{
public IList<UserDto> GetUserDto(IEnumerable<User> users, IMapper _mapper)
{
List<UserDto> result = new List<UserDto>();
foreach (var user in users)
{
var tagDto = _mapper.Map<IList<TagDto>>(user.UserTags.Select(x => x.Tag));
var userDtos = new UserDto
{
Id = user.Id,
Username = user.Username,
Tags = tagDto
};
result.Add(userDtos);
}
return result;
}
}
Использование: (Контроллер)
private IMapper _mapper;
private MyMapper _myMapper;
public UsersController(IMapper mapper)
{
_mapper = mapper;
_curioMapper = new CurioMapper();
}
[HttpGet]
public IActionResult GetAll()
{
var users = _userService.GetAll();
var result = _myMapper.GetUserDto(users, _mapper);
return Ok(result);
}
Просто мысль, предполагая "Все сделано по рекомендациям"
public IEnumerable<User> GetAll()
{
return _context.Users
.Include(x => x.UserTags)
.ThenInclude(z => z.Tag);
}
эти данные, кажется, указывают
[
{
"id": 1,
"username": "Bartek",
"password": null,
"userTags": [ // List of Tags ]
что вы должны изменить на это
public IEnumerable<User> GetAll()
{
return _context.Users
.Include(a => a.UserTags.Tags.Select(c => c.tagname));
}