我有一个与自动完成一起使用的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 to AspNetRoles表,UserId是AspNetRoles表的FK。
所以让我们假设我们有三个角色,红队,蓝队,绿队,我是红队和绿队的管理员,所以UserRolesAdmin表中的2条记录包含红队id和我的用户id,绿队id和我的用户id。
我想确保我返回的用户要么属于红队,要么属于绿队。
发布于 2014-12-11 21:51:05
在您的第一个where
之后附加这个
.Where(x =>
db.UserRoleAdmins.Any(y =>
x.ud.UserId == y.UserId && (y.RoleId == "red team" || y.RoleId == "green team")
发布于 2014-12-14 09:12:52
感谢马格努斯让我走上正确的方向,这才是有效的,增加了一个额外的位置。
.Where(x => db.UserRoleAdmins.Any(
y => y.Id == userId &&
x.anu.AspNetRoles.Select(v=>v.Id).ToList().Contains(y.RoleId)))
https://stackoverflow.com/questions/27432901
复制相似问题