选择所有列并在EF Core,.NET Core中返回给定类型

时间:2020-09-06 13:36:04

标签: c# linq

[已解决]

return await _context.AspNetUsers.Where( x => x.AspNetUserRoles.Count() == 0).ToListAsync(); 

完成该工作,并根据需要返回AspNetUsers对象。 Mustafa Arslan的答案也仅适用于userId


[原始问题]

我有两个表AspNetUsersAspNetUserRoles

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
}

写这个的正确方法是什么?

1 个答案:

答案 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(); 
    }
相关问题