return await _context.AspNetUsers.Where( x => x.AspNetUserRoles.Count() == 0).ToListAsync();
完成该工作,并根据需要返回AspNetUsers对象。 Mustafa Arslan的答案也仅适用于userId
我有两个表AspNetUsers
和AspNetUserRoles
。
AspNetUsers表具有许多列,但是AspNetUserRoles具有两列:userId和roleId;
我想查询每个没有角色的用户,并从我的控制器中调用它。
这给出了我想要的结果
SELECT *
FROM AspNetUsers
LEFT JOIN AspNetUserRoles ON AspNetUsers.Id = AspNetUserRoles.UserId
WHERE AspNetUserRoles.RoleId IS NULL
这是我在控制器中的方法,该方法假定返回AspNetUsers
的列表,但Join给出错误并指出:
The type arguments for method 'Queryable.Join<TOuter, TInner, TKey, TResult>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter, TKey>>, Expression<Func<TInner, TKey>>, Expression<Func<TOuter, TInner, TResult>>)' cannot be inferred from the usage. Try specifying the type arguments explicitly.
[HttpGet]
[Route("Group")]
public async Task<ActionResult<IEnumerable<AspNetUsers[]>>> GetAspNetUsersWithGroups()
{
return await _context.AspNetUsers.Join(_context.AspNetUserRoles,
users => users.Id,
roles => roles.userId,
(AspNetUsers) => new { Id = roles.Id }); // This is where I think the error is
}
写这个的正确方法是什么?
答案 0 :(得分:1)
我认为您想列出角色ID。
[HttpGet]
[Route("Group")]
public async Task<ActionResult<IEnumerable<string>>> GetAspNetUsersWithGroups()
{
return await _context.Users.Join(_context.UserRoles,
users => users.Id,
roles => roles.UserId,
(user, userRole) => userRole.RoleId).ToListAsync();
}