0

現在、 User テーブルからユーザー情報を取得するサービスがあります。ユーザーは管理者または従業員が作成でき、これらの従業員はすべて独自の ID を持っています。そのことを念頭に置いて、この管理者またはユーザーの ID を保持する CreatedBy という列があり、その名前を返さなければなりません。これまでのところ、ユーザー モデルをプルしましたが、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 には Id である CreatedBy がありますが、返されるモデル userDetailsDto には名前文字列プロパティもあり、ここで試して割り当てます。オートマッパーで。Id で名前を割り当てる方法を考えることができれば。

CreateMap<ApplicationUser, UserDetailsDto>()
.ForMember(dest => dest.CompanyName,
           opts => opts.MapFrom(src => src.Company.Company_Name));
4

1 に答える 1