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

时间:2018-05-01 20:43:45

标签: c# entity-framework

我有3个表:User,Roles和UserRoles,我有一个角色ID列表visible ? <Fade> <SomeComponent/> </Fade> : undefined 。我想返回ID为2,3或4的所有用户。

型号:

{ 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; }
}

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

更新

我知道为什么......我的代码是正确的。 Mapper类中有一些错误。 我使用了像.irstOrDefault()。RoleId这样的东西。所以它只返回第一个数据,用户可能有多个角色!谢谢你们

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

如果您不想将导航属性添加到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();

答案 2 :(得分:-1)

听起来你正试图从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;