首页 > 解决方案 > 多对多关系 - 以 JSON 格式下载数据

问题描述

我在表之间有一个多对多关系:

(一切都按照建议进行)

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

但是没有任何内置选项可以达到预期的效果吗?

标签: asp.net-core.net-coreasp.net-core-2.0asp.net-core-webapi

解决方案


我为这种情况构建了自己的映射器:

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

推荐阅读