asp.net-core - 多对多关系 - 以 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);
}
但是没有任何内置选项可以达到预期的效果吗?
解决方案
我为这种情况构建了自己的映射器:
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);
}
推荐阅读
- python - 为什么 acrapy spider 不能正确使用烧瓶?
- c# - 将行添加到 DataTable
- android - 如何在android中设计自定义警报对话框
- javascript - 图像缩放放大镜效果在 Angular 中无法正常工作
- javascript - 使用 Gitlab CI 部署 Angular App 会导致 tmp 目录出错
- android - 如何在一项活动中使用按钮在第二项活动中执行某些操作?
- firebase-cloud-messaging - Azure 是否有类似 Firebase In-App Messaging 的功能
- ruby-on-rails - Ruby on rails order_by 两个属性
- github - 解决 GitHub 存储库环境机密
- javascript - 如何为列表中的每个元素添加一个复选框,并能够通过我的反应应用程序中的状态来控制它?