目前,我有一个从用户表中获取用户信息的服务。用户可以由管理员或员工创建,所有这些员工都有自己的 ID。因此,考虑到这一点,有一个名为 CreatedBy 的列,其中包含此管理员或用户的 id,我必须返回其名称。到目前为止,我已经提取了用户模型,但现在我需要创建在 CreatedBy 中使用 user.Id 提取用户名的部分
这就是我从数据库表用户和公司中提取的内容,查询参数只是名称或公司名称
public async Task<List<ApplicationUser>> SearchUsers(UserSearchDto userSearchDto)
{
userSearchDto.FirstName ??= string.Empty;
userSearchDto.LastName ??= string.Empty;
userSearchDto.CompanyName ??= string.Empty;
return await _locationDbContext.Users
.Include(nameof(Company))
.Where(user => user.FirstName.Contains(userSearchDto.FirstName)
&& user.LastName.Contains(userSearchDto.LastName)
&& user.Company.Company_Name.Contains(userSearchDto.CompanyName))
.ToListAsync();
}
因此,在我返回的这个列表中,我尝试执行另一个查询,以根据第一个服务中返回的 CreatedBy id 获取更多用户信息,以带回那些在 CreatedBy 中具有 id 的用户的名称。
var userDtos = _mapper.Map<List<ApplicationUser>, List<UserDetailsDto>>(users);
foreach (UserDetailsDto user in userDtos)
{
user.CreatedByName = await _userService
.SearchUsers(userDtos.Where(user.Id == user.CreatedBy))
}
到目前为止,我觉得这是一个可能的解决方案,但我不确定我会在哪里或如何拉它,因为这个解决方案在我使用“.Where”语句的时候给了我一个错误。也许如果我可以创建另一个服务,它将通过 Id 返回用户并使用 createdby Id 来提取名称,但还没有类似的东西存在。我想返回的模型也与表示 Users 表的模型有点不同,因为 ApplicationUser 有 CreatedBy 这是一个 Id 但返回的模型 userDetailsDto 也将有一个名称字符串属性,我将在这里尝试分配在自动映射器中。如果我能想到如何通过 ID 分配名称。
CreateMap<ApplicationUser, UserDetailsDto>()
.ForMember(dest => dest.CompanyName,
opts => opts.MapFrom(src => src.Company.Company_Name));