卡在 linq 查询的一部分上

本文关键字:一部分 查询 linq 卡在 | 更新日期: 2023-09-27 18:33:58

我有一个与自动完成一起使用的linq查询,传入一个与电子邮件或用户名匹配的术语,该术语从我的数据库中返回用户详细信息(UserDetails)

var details = db.AspNetUsers
            .Join(db.UserDetails, 
              anu => anu.Id, ud => ud.Id, (anu, ud) => new { anu, ud })
            .Where(@t => @t.anu.Email.Contains(term) 
               || (@t.ud.firstname + @t.ud.lastname).Contains(term))
            .OrderBy(@t => @t.ud.lastname)
            .ThenBy(@t => @t.ud.firstname)
            .ThenBy(@t => @t.anu.Email)
            .Select(@t => new MemberDetails
            {
              FirstName = @t.ud.firstname,
              LastName = @t.ud.lastname,
              Email = @t.anu.Email,
              Phone = @t.ud.phone,
              Postcode = @t.ud.postcode,
              MemberNumber = @t.ud.membershipNumber,
              Street = @t.ud.street,
              City = @t.ud.city,
            }).ToList();

缺少的是,假设我是登录用户,我创建了一个名为UserRoleAdmins的表,其中包含2列

 - RoleId nvarchar(128)
 - UserId nvarchar(128)

RoleId 是 FK 到 AspNetRoles 表,UserId 是 FK 到 My UserDetails 表

因此,假设我们有 3 个角色,红队、

蓝队、绿队,我是红队和绿队的管理员,因此 UserRolesAdmin 表中的 2 条记录包含红队 ID 和我的用户 ID,以及绿色团队 ID 和我的用户 ID

我想确保我返回的用户属于红队或绿队

卡在 linq 查询的一部分上

第一次where之后附加以下内容:

.Where(x => 
   db.UserRoleAdmins.Any(y => 
       x.ud.UserId == y.UserId && (y.RoleId == "red team" || y.RoleId == "green team")

感谢马格努斯让我走上正确的方向,这就是有效的方法,通过添加一个额外的 Where

.Where(x => db.UserRoleAdmins.Any(
  y => y.Id == userId && 
  x.anu.AspNetRoles.Select(v=>v.Id).ToList().Contains(y.RoleId)))