Итак, я попытался выполнить поиск и не смог найти достаточно четкий ответ, который привел меня к решению, поэтому я решил добавить свою проблему и, в конечном итоге, свое решение для других.
Прошу прощения за мою новизну в SO (считайте, что это начало моей репутации), дайте мне знать, если я сделаю что-нибудь неправильно или что-нибудь забуду.
Я пытаюсь:
- Создание контроллера, который запрашивает базу данных для всех пользователей и их ролей.
- Возвращает список уникальных идентификаторов пользователей и адрес электронной почты со списком ролей.
- Электронная почтаадрес и роли находятся в отдельных таблицах, а pkey / fkey - это идентификатор пользователя
- . Роли возвращаются в виде списка, содержащего мой AllUserInRolesDto
Каждый пример, который я просматривал на SO или другомсайты предоставили только примеры возврата анонимных объектов данных обратно. У меня нет большого количества синтаксиса запросов LINQ, поэтому я застрял на час или около того.
Вот мой DTO
namespace Lib.Dtos
{
public class AllUserInRolesDto
{
public string FullName { get; set; }
public string Email { get; set; }
public List<RoleDto> Roles { get; set; }
}
public class RoleDto
{
public string RoleName { get; set; }
}
}
Iесть бизнес-уровень, который определяет запрос LINQ
public List<AllUserInRolesDto> UserAllRolesGet()
{
List<AllUserInRolesDto> getAllUsersRoles = (from u in _context.Users
join r in _context.UserInRoles on u.UserId equals r.UserId
into ur
select new Lib.Dtos.AllUserInRolesDto()
{
FullName = u.Fullname,
Email = u.Email,
Roles = ur //this was the problem line and what the docs were describing
}).ToList();
return getAllUsersRoles;
}
... и мой контроллер
[HttpGet("GetAllUserRolesList")]
public IActionResult GetAllUserRolesList()
{
List<Lib.Dtos.AllUserInRolesDto> allUsers = _userBL.UserAllRolesGet();
return new JsonResult(allUsers);
}
мое решение
Сделав шаг назад на секунду, я понял, что на самом деле не возвращаю нужный объект обратно в свойство моих ролей ... и поэтому мне нужно перебрать мои роли и создать из них список. Вот что сработало.
public List<AllUserInRolesDto> UserAllRolesGet()
{
List<AllUserInRolesDto> getAllUsersRoles = (from u in _Context.Users
join r in _context.UserInRoles on u.UserId equals r.UserId
into ur
select new Lib.Dtos.AllUserInRolesDto()
{
FullName = u.Fullname,
Email = u.Email,
Roles = .Select(x => new Lib.Dtos.RoleDto() { RoleName = x.RoleName }).ToList() //Changed to this
}).ToList();
return getAllUsersRoles;
}
В любом случае, вероятно, довольно глупая ошибка, но я застрял на некоторое время. Может быть, это поможет кому-то, находящемуся на той же должности, или если у кого-то есть комментарий о том, как я мог бы улучшить это или использовать другой подход, я открыт для предложений