簡體   English   中英

C# Linq 查詢外鍵關系

[英]C# Linq Query with foreign Key relationship

請考慮以下情況,

我有兩個表SplitRequestSplitRequestApproval

SplitRequest有一個SplitRequestApproval集合,而SplitRequestApproval有一個SplitRequest

上面的意思是SplitRequestSplitRequestApproval之間存在一對多的關系

SplitRequestApprovalApproverUserId SplitRequestId DateApproved等...作為列。 SplitRequest具有實際的請求詳細信息。

那么問題是我想要一個 linq 查詢,該查詢將獲取登錄用戶(批准者)也沒有參加的List<SplitRequest>

因此,如果 ID 為123的用戶A登錄並導航到SplitRequest視圖,該視圖應該只顯示他尚未處理的請求。 因此,如果他批准 ID 為12SplitRequest ,則該項目不應再成為他可見的請求的一部分。 SplitRequestApproval獲得一個新行, SplitRequestId12Userid123

如何使用 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.

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