我有三张表Users
,UserRoles
,UserInRole
。
Users UserInRole UserRole
------ ---------- --------
Id UserId RoleId
Name RoleId Name
Email
我想选择" admin" 或"编辑" 角色的用户电子邮件。
var emails = userUnitOfWork.Repository.Select()
.Where(u => u.UserRoles
.All(r=>r.Name=="admin" || r.Name=="editor")).Select(t=>t.Email);
但只返回一个没有角色的电子邮件。
答案 0 :(得分:1)
使用and
这样的两个Any条件
var emails = userUnitOfWork.Repository.Select()
.Where(u => u.UserRoles.Any(r => r.Name == "admin")
&& u.UserRoles.Any(r => r.Name == "editor"))
.Select(t=>t.Email);
或像这样的Count条件
var emails = userUnitOfWork.Repository.Select()
.Where(u => u.UserRoles.Count(r => r.Name == "admin" || r.Name == "editor") == 2)
.Select(t=>t.Email);
更新:您的更新(将and
更改为or
)会使其变得微不足道 - 只需在原始查询中将All
更改为Any
即可。
答案 1 :(得分:0)
The issue is that .All()
requires all items to match, this means that if the user has any roles other than "admin" or "editor" the result will be false.
a solution to this is to use .Any()
var emails = userUnitOfWork.Repository.Select()
.Where(
u => u.UserRoles.Any(r=>r.Name=="admin")
&& u.UserRoles.Any(r =>r.Name =="editor")
)
.Select(t=>t.Email