Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 卡在linq查询的一部分上_C#_Linq - Fatal编程技术网

C# 卡在linq查询的一部分上

C# 卡在linq查询的一部分上,c#,linq,C#,Linq,我有一个linq查询,它与autocomplete一起使用,传入一个与电子邮件或用户名匹配的术语,从我的数据库返回用户详细信息UserDetails var details = db.AspNetUsers .Join(db.UserDetails, anu => anu.Id, ud => ud.Id, (anu, ud) => new { anu, ud }) .Where(@t => @t

我有一个linq查询,它与autocomplete一起使用,传入一个与电子邮件或用户名匹配的术语,从我的数据库返回用户详细信息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的表,其中包含两列

 - RoleId nvarchar(128)
 - UserId nvarchar(128)
RoleId是AspNetRoles表的FK,UserId是my UserDetails表的FK

让我们假设我们有3个角色,红队、蓝队、绿队,我是红队和绿队的管理员,因此UserRoleAdmin表中的2条记录包含红队id和我的用户id,以及绿队id和我的用户id


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

请在您的第一个位置后附加以下内容:


多亏了马格纳斯让我走上了正确的方向,这才起到了作用,在何处添加了一个额外的按钮

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

为什么使用@t?这只会增加阅读难度。为了澄清,您希望查询返回查询用户所属团队的所有用户吗?管理员会从他所有的团队中获取用户,但是一个简单的用户只会从他的团队中获取用户。是的,这是正确的,我不能确切地说where==Admin,因为我不知道他们扮演什么角色。只允许管理员用户返回用户,普通的无管理员用户不能返回。谢谢,虽然我不知道他们被称为红色团队和绿色团队,但可以是团队a或团队B,我不能使用文本字符串检查角色。标记为答案,因为它使我了解了我需要的内容
.Where(x => db.UserRoleAdmins.Any(
  y => y.Id == userId && 
  x.anu.AspNetRoles.Select(v=>v.Id).ToList().Contains(y.RoleId)))