[英]Many to many linq query Entity Framework
我有三個表Users
, UserRoles
, UserInRole
。
Users UserInRole UserRole
------ ---------- --------
Id UserId RoleId
Name RoleId Name
Email
我想選擇處於“管理員”或“編輯”角色的用戶電子郵件。
var emails = userUnitOfWork.Repository.Select()
.Where(u => u.UserRoles
.All(r=>r.Name=="admin" || r.Name=="editor")).Select(t=>t.Email);
但這只會返回一封沒有任何作用的電子郵件。
無論是使用and
兩個任何這樣的條件
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);
或像這樣的單個計數條件
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
您原始查詢。
問題是.All()
要求所有項目都匹配,這意味着如果用戶具有除“ admin”或“ editor”以外的任何角色,則結果將為false。
一個解決方案是使用.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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.