[英]LINQ subquery with multiple columns
我正在嘗試在LINQ中重新創建此SQL查詢:
SELECT *
FROM Policies
WHERE PolicyID IN(SELECT PolicyID
FROM PolicyRegister
WHERE PolicyRegister.StaffNumber = @CurrentUserStaffNo
AND ( PolicyRegister.IsPolicyAccepted = 0
OR PolicyRegister.IsPolicyAccepted IS NULL ))
兩個表的關系圖:
到目前為止,這是我的嘗試:
var staffNumber = GetStaffNumber();
var policyRegisterIds = db.PolicyRegisters
.Where(pr => pr.StaffNumber == staffNumber && (pr.IsPolicyAccepted == false || pr.IsPolicyAccepted == null))
.Select(pr => pr.PolicyID)
.ToList();
var policies = db.Policies.Where(p => p.PolicyID.//Appears in PolicyRegisterIdsList)
我想我很親密,可能會制作兩個列表並以某種方式使用Intersect(),但是今天早上我看了一下我的代碼,並認為必須有一種更簡單的方法來執行此操作。 LINQ應該是一種更具可讀性的數據庫語言,對嗎?
提供的任何幫助將不勝感激。
只需使用Contains
:
var policies = db.Policies.Where(p => policyRegisterIds.Contains(p.PolicyID));
還更好地將policyRegisterIds
存儲為HashSet<T>
而不是將列表存儲在O(1)
而不是List<T>
的O(n)
中:
var policyRegisterIds = new HashSet<IdType>(db.PolicyRegisters......);
但是更好的方法是刪除ToList()
並使其全部作為數據庫中的一個查詢發生:
var policyRegisterIds = db.PolicyRegisters.Where(pr => pr.StaffNumber == staffNumber &&
(pr.IsPolicyAccepted == false || pr.IsPolicyAccepted == null));
var policies = db.Policies.Where(p => policyRegisterIds.Any(pr => pr.PolicyID == p.PolicyID));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.