簡體   English   中英

EF綜合查詢聯接

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM