[英]EF Complex Query Join
下面顯示的查詢非常簡單,它將簡單地為指定客戶拉出任務。 我現在想做的是獲取傳遞給此函數的UserId並驗證用戶是否有權查看該任務。
var dbData = await db.Tasks
.Where(a => a.CustomerId == customerId)
.OrderBy(a => a.CreatedDateTime).ToListAsync();
在Tasks表中有一個OrganizationId屬性。 用戶可以通過UserOrganizations表屬於n + 1個組織。 獲取已知UserId
並驗證Task.OrganizationId是用戶之一的最佳方法是什么?
如果關系不是Tasks
類的屬性,則可以用查詢語法編寫聯接。 遵循以下原則:
var dbData = await (from t in db.Tasks
join uo in UserOrganizations on t.OrganizationId equals uo.OrganizationId
join u in Users on uo.UserId equals u.UserId
where t.CustomerId == customerId && u.UserId == theUserId
order by t.CreatedDateTime
select t).ToListAsync();
根據生成數據類的方式,您可能已經在Tasks
類上具有導航屬性,從而可以執行以下操作:
var dbData = await db.Tasks
.Where(a => a.CustomerId == customerId && a.Organization.UserOrganizations.Any(uo => uo.UserId == theUserId)
.OrderBy(a => a.CreatedDateTime).ToListAsync();
var dbData = await db.Tasks
.Where(a => a.CustomerId == customerId
&& a.Organization.Users
.Any(u=>u.UserId == customerId)))
.OrderBy(a => a.CreatedDateTime).ToListAsync();
假定已設置外鍵,並且可以在實體之間導航關系。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.