[英]Need to convert Left join SQL to linq query - help appreciated
這是我的代碼,我遇到的問題是 On 子句中的小於比較......因為 Linq 不允許這樣做......當我將其中一個字段與 null 進行比較時,向下遷移到 where 子句將不起作用。
這是 sql 查詢(現在 a.UserID= 是硬編碼的)
SELECT A.Policy, A.Comments, A.EventDTTM, A.Status, A.Reason, A.FollowUp
FROM PP_PolicyActivity A
LEFT JOIN PP_PolicyActivity B
ON(A.Policy = B.Policy AND A.EventDTTM < B.EventDTTM)
WHERE A.UserID = 'Ixxxxxx'
AND B.EventDTTM IS NULL AND a.status = 'open - Pending'
order by A.EventDTTM DESC
我需要上述查詢的結果集作為 IEnumerable 列表來填充視圖
我的任務是重建一個舊的 VB ASP NET,它背后有一組常設生產數據庫......我沒有更改數據庫設計的選項。 我連接到服務器和數據庫,這個查詢是針對該數據庫上的一個表......該模型還反映了實際表的布局。
問題在於 A.EventDTTM < B.EventDTTM - 我無法將其移至 where 子句,因為我還必須在 where 子句中處理 B.EventDTTM IS NULL。 我需要以某種方式重新調整查詢,以便它對 'linq' 友好
public class PolicyActivityModel
{
public string Policy { get; set; }
public int PolicyID { get; set; }
public string Status { get; set; }
public string Reason { get; set; }
public string Comments { get; set; }
public DateTime EventDTTM { get; set; }
public string UserID { get; set; }
public DateTime FollowUp { get; set; }
}
公司政策禁止我顯示連接字符串。
我對 Linq 非常陌生,非常感謝任何幫助
謝謝你
從數據庫中獲取策略后,您可以使用導航屬性。
var policy = DbContext.First(x => x.Id == 1000);
var otherPolicies = policy.ConnectedPolicies.Where(p => ...);
自連接很奇怪,但這是對 Linq 最直接的翻譯:
var query = from leftPP in PP_PolicyActivity
join rightPP in PP_PolicyActivity
on new { Policy = leftPP.Policy, EventDTTM = leftPP.EventDTTM }
equals new { Policy = rightPP.Policy, EventDTTM = rightPP.EventDTTM }
into pp from joinedRecords.DefaultIfEmpty()
where leftPP.UserId == 1
&& leftPP.EventDTTM < rightPP.DTTM)
&& rightPP.EventDTTM == null
&& leftPP.status = "open - Pending"
select new
{
leftPP,
rightPP
}
我免費輸入了這個,沒有模型或智能感知,因此可能會有一些較小的錯誤。
您可以在該子句中添加 order by,但它仍然是 IQeryable,所以我會保留它。
然后,獲取模型列表:
var results = query.OrderByDescending(x => x.EventDTTM).ToList();
實際的連接是第 2、3、4 和 5 行。它是 SQL 的冗長和“倒退”,最重要的是使用匿名類型。 訪問單個屬性將類似於:
results[0].leftPP.PolicyId
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.