我在物體User-UsersProjects-Project之間有多對多的關系。
我想獲得分配給指定的(通過projectID)專案的用戶的映射串列,其中有關于分配給用戶的專案數量的一般資訊,而不是每個專案。
請看我的代碼
控制器 [HttpGet("{projectId}/users-assigned")/span>]
[Description("獲取分配給指定專案的用戶串列。")]
public async Task<ActionResult> GetProjectUsers(int projectId)。
{
if (!ProjectExistById(projectId)) return NotFound("專案不存在")。
var project = await _context.Projects.Include(x => x.UserProjects).ThenInclude(z => z.User).SingleOrDefaultAsync(x => x.ProjectId == projectId)。
var users = project.UserProjects.Select(x => x.User).ToList()。
var usersDto = _mapper.Map<ICollection<UserForProjectDTO>>(users)。
return Ok(usersDto);
}
入口
public class AppUser : IdentityUser<int>
{
public string FirstName { get; set; }
public string LastName { get; set; }
public ICollection<AppUserProject> UserProjects { get; set; }
}
public class Project
{
Key] [Key]
public int ProjectId { get; set; }
public string Number { get; set; }
public string Name { get; set; }
public ICollection<AppUserProject> UserProjects { get; set; }
}
public class AppUserProject
DTO
public class UserForProjectDTO
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public int ProjectsCount { get; set; }
AutoMapperProfiles
CreateMap<AppUser, UserForProjectDTO>()。
CreateMap<AppUserProject, UserForProjectDTO>()。
當前結果 /api/Projects/11/users-assigned
[
{
"id"。4,
"firstName": "Robert",
"lastName": "Lewandowski"。
"projectsCount": 0。
},
{
"id": 6,
"firstName": "Ernest",
"lastName": "Giovannni",
"projectsCount": 0。
},
{
"id": 7,
"firstName": "Mark",
"lastName": "Looser",
"projectsCount": 0。
},
{
"id": 8,
"firstName": "Frank",
"lastName": "Lampard",
"projectsCount": 0。
},
{
"id": 9,
"firstName": "Mark",
"lastName": "Ruffalo",
"projectsCount": 0.
}
]
預期結果
[
{
"id"。4,
"firstName": "Robert",
"lastName": "Lewandowski"。
"projectsCount": 4。
},
{
"id": 6,
"firstName": "Ernest",
"lastName": "Giovannni",
"projectsCount": 2.
},
{
"id": 7,
"firstName": "Mark",
"lastName": "Looser",
"projectsCount": 2。
},
{
"id": 8,
"firstName": "Frank",
"lastName": "Lampard",
"projectsCount": 1。
},
{
"id": 9,
"firstName": "Mark",
"lastName": "Ruffalo",
"projectsCount": 1.
}
]
我的資料庫
現在我得到的總是0或1(取決于我如何映射,但它仍然不是我所期望的)。
這個問題是因為我想通過專案ID來獲得有專案數量的用戶串列,而不是所有專案。這是我第一次遇到這種問題。任何提示都將是有用的。
uj5u.com熱心網友回復:
我不認為你在這里需要 AutoMapper。這是一次性的查詢,你可以不通過第三方庫而自己預測需要的屬性。
var users =
from p in context.Projects
where p.ProjectId == projectId
from up in p.UserProjects
select new UserForProjectDTO
{
Id = up.UserId,
名 = up.User.FirstName,
LastName = up.User.LastName,
ProjectsCount = up.User.UserProjects.Count()
};
作為好處,你有更快的查詢,它只加載需要的欄位而沒有開銷。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/310070.html
標籤:

