繁体   English   中英

返回列表中所有具有角色ID的用户

[英]Return all users with role id in a list

我有3个表:User,Roles和UserRoles,并且具有角色ID { 2, 3, 4 } 我想返回ID为2、3或4的所有用户。

楷模:

public partial class User
{
    public int Id { get; set; }
    public virtual ICollection<UserRoles> UserRoles { get; set; }
}

public partial class Roles
{
    public int Id { get; set; }
}

public partial class UserRoles
{
    public int UserId { get; set; }
    public int RoleId { get; set; }

    public virtual Users Users { get; set; }
    public virtual Roles Roles { get; set; }
}

和我有的代码:

int[] RoleIds = { 2, 3, 4 };
return await _dbContext.Users
    .Where(u => u.UserRoles.Any(x=> RoleIds.Contains(x.RoleId)));

我不知道为什么,但是我的结果包含具有roleId == 1的记录。

更新

我知道为什么。我的代码是正确的。 Mapper类中有问题。 我使用了诸如.FirstOrDefault()。RoleId之类的东西。 因此它仅返回第一个数据,并且用户可能具有多个角色! 感谢大伙们

尝试倒退,看看是否有帮助...

return await _dbContext.UserRoles
     .Where(r => RoleIds.Contains(r.RoleId))
     .Select(r => r.Users)

如果您不想将导航属性添加到UserRoles ,则可以使用LINQ查询语法轻松地做到这一点:

var usersQuery = from role in _dbContext.Roles
                 join userRole in _dbContext.UserRoles 
                     on role.Id equals userRole.RoleId
                 join user in _dbContext.Users
                     on userRole.UserId equals user.Id;
                 where roleIds.Contains(role.Id)
                 select user;

var users = usersQuery.ToList();

听起来您正在尝试从UserRole关系表中获取用户。

以下是使用查询表达式语法的方法:

int[] RoleIds = { 2, 3, 4 }; 

var users = from ur in _dbContext.UserRoles
            where RoleIds.Contains(ur.RoleId)
            select ur.Users;

或者,如果您不想要或没有导航属性:

int[] RoleIds = { 2, 3, 4 }; 

var users = from ur in _dbContext.UserRoles
            where RoleIds.Contains(ur.RoleId)
            join user in _dbContext.Users
            on ur.UserId equals user.Id
            select user;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM