【问题标题】:Select All Columns and return a given type in EF Core, .NET Core选择所有列并返回 EF Core、.NET Core 中的给定类型
【发布时间】:2020-09-06 13:36:04
【问题描述】:

[已解决]

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
}

正确的写法是什么?

【问题讨论】:

  • 为什么不使用更清洁的方法?类似_context.AspNetUsers.Where(x =&gt; x.Roles.Count() == 0).ToListAsync()
  • AspNetUsers 没有关于角色本身的专栏。两个表只有 Id 列相同。
  • 完全一样。如果没有加入实体,则用户没有分配任何角色
  • 您应该使用x.AspNetUserRoles.Any() 而不是x.AspNetUserRoles.Count() == 0。更快

标签: c# linq


【解决方案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(); 
    }

【讨论】:

    猜你喜欢
    • 2020-09-23
    • 2016-10-10
    • 1970-01-01
    • 1970-01-01
    • 2020-05-12
    • 2020-08-29
    • 2018-08-02
    • 2018-02-07
    • 2021-11-16
    相关资源
    最近更新 更多