[英]C# Linq Query with foreign Key relationship
請考慮以下情況,
我有兩個表SplitRequest
和SplitRequestApproval
。
SplitRequest
有一個SplitRequestApproval
集合,而SplitRequestApproval
有一個SplitRequest
上面的意思是SplitRequest
和SplitRequestApproval
之間存在一對多的關系
SplitRequestApproval
有ApproverUserId
SplitRequestId
DateApproved
等...作為列。 而SplitRequest
具有實際的請求詳細信息。
那么問題是我想要一個 linq 查詢,該查詢將獲取登錄用戶(批准者)也沒有參加的List<SplitRequest>
。
因此,如果 ID 為123
的用戶A
登錄並導航到SplitRequest
視圖,該視圖應該只顯示他尚未處理的請求。 因此,如果他批准 ID 為12
的SplitRequest
,則該項目不應再成為他可見的請求的一部分。 SplitRequestApproval
獲得一個新行, SplitRequestId
為12
, Userid
為123
如何使用 linq 實現這一點。
var request = await _context.SplitRequestApproval
.Include(c => c.SplitRequest)
.Where(c => c.ApproverUserId != loggedInUserId)
.Select(c => c.SplitRequest)
.ToListAsync();
這是返回 0 個項目。 而有登錄用戶沒有參加的SplitRequest
我得到了一個解決方案,但我認為這是一條很長的路
//gets the list of splitRequests
var splitRequests = await _context.SplitRequest.ToListAsync();
//loops through each request
foreach (var item in splitRequests)
{
//check if the request has been approved by the user
var IsExistApprovalForLoggedInUser = await _context.SplitRequestApproval.AnyAsync(c => c.SplitRequestId == item.SplitRequestId && c.ApproverUserId == loggedInUserId);
if (IsExistApprovalForLoggedInUser)
{
//if yes remove from list
splitRequests.Remove(item);
}
}
我認為應該有一個 linq 查詢會給我相同的結果並且更快
您的 Linq 代碼在用戶不是當前用戶的情況下選擇 SplitRequestApprovals,然后導航到 SplitRequest。
這意味着根本不會選擇沒有任何 SplitRequestApprovals 的 SplitRequests,我認為這是您的問題所在。 此外,將多次選擇具有多個用戶批准的拆分請求。
您要做的是 select 當前用戶沒有任何 SplitRequestApprovals 的 SplitRequests。 像這樣的東西:
var request = await _context.SplitRequest
.Where(c => !c.SplitRequestApprovals.Any(c => c.ApproverUserId == loggedInUserId))
.ToListAsync()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.