我有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这样的东西。所以它只返回第一个数据,用户可能有多个角色!谢谢你们
答案 0 :(得分:2)
尝试倒退,看看是否有帮助...
return await _dbContext.UserRoles
.Where(r => RoleIds.Contains(r.RoleId))
.Select(r => r.Users)
答案 1 :(得分:0)
如果您不想将导航属性添加到User
或Roles
,则可以使用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;